代码之家  ›  专栏  ›  技术社区  ›  Am1rr3zA

通过Python获取计数大于特定数字的列表项

  •  0
  • Am1rr3zA  · 技术社区  · 15 年前

       ip[0] = ['23:30:42.476071', '55729', '192.168.98.138.49341', '201.20.49.239.80', '562034568', -1]
       ip[1] = ['23:30:43.110194', '20442', '201.20.49.239.80', '192.168.98.138.49341', '364925831', '562034569']
        ip[2] = ['23:30:43.110290', '55730', '192.168.98.138.49341', '201.20.49.239.80', -1, '5840']
        ip[3] = ['23:30:43.170344', '55731', '192.168.98.138.49341', '201.20.49.239.80', '562034569:562034972', '364925832']
        ip[4] = ['23:30:43.170918', '20443', '201.20.49.239.80', '192.168.98.138.49341', -1, '64240']
        ip[5] = ['23:30:44.022511', '20444', '201.20.49.239.80', '192.168.98.138.49341', '364925832:364925978', '562034972']
    

    我想从我原来的ip[I][2]=192.168.98.138的列表中获取索引和子列表

    对于上面的列表,我想要得到:

        ip[0] = ['23:30:42.476071', '55729', '192.168.98.138.49341', '201.20.49.239.80', '562034568', -1]
        ip[2] = ['23:30:43.110290', '55730', '192.168.98.138.49341', '201.20.49.239.80', -1, '5840']
        ip[3] = ['23:30:43.170344', '55731', '192.168.98.138.49341', '201.20.49.239.80', '562034569:562034972', '364925832']
    
    4 回复  |  直到 15 年前
        1
  •  2
  •   Charles Duffy    15 年前

    返回结果 ip[i][2] == ip[0][2] 使用列表理解:

    result = [ d for d in ip if d[2] == ip[0][2] ]
    
        2
  •  2
  •   Katriel    15 年前
    [addr for addr in ip if addr[2].startswith("192.168.98.138"]
    

    addrs = []
    for addr in ip:
        if addr[2].startswith("192.168.98.138"):
            addrs.append(addr)
    
        3
  •  2
  •   Tim Pietzcker    15 年前

    谢谢你的澄清。使用列表理解:

    >>> ip = [['23:30:42.476071', '55729', '192.168.98.138.49341', '201.20.49.239.80', '562034568', -1], 
    ['23:30:43.110194', '20442', '201.20.49.239.80', '192.168.98.138.49341', '364925831', '562034569'],
    ['23:30:43.110290', '55730', '192.168.98.138.49341', '201.20.49.239.80', -1, '5840'],
    ['23:30:43.170344', '55731', '192.168.98.138.49341', '201.20.49.239.80', '562034569:562034972', '364925832'],
    ['23:30:43.170918', '20443', '201.20.49.239.80', '192.168.98.138.49341', -1, '64240'],
    ['23:30:44.022511', '20444', '201.20.49.239.80', '192.168.98.138.49341', '364925832:364925978', '562034972']]
    
    >>> needle = ip[0][2]
    >>> [item for item in ip if item[2]==needle]
    [['23:30:42.476071', '55729', '192.168.98.138.49341', '201.20.49.239.80', '562034568', -1], 
    ['23:30:43.110290', '55730', '192.168.98.138.49341', '201.20.49.239.80', -1, '5840'], 
    ['23:30:43.170344', '55731', '192.168.98.138.49341', '201.20.49.239.80', '562034569:562034972', '364925832']]
    
        4
  •  1
  •   Mew    15 年前

    如果要同时获取索引和子列表(根据您描述的内容),则以下操作可能有效:

    >>> print [(index, x) for index, x in enumerate(ip) if x[2] == ip[0][2]]
    [(0, ['23:30:42.476071', '55729', '192.168.98.138.49341', '201.20.49.239.80', '562034568', -1]), (2, ['23:30:43.110290', '55730', '192.168.98.138.49341', '201.20.49.239.80', -1, '5840']), (3, ['23:30:43.170344', '55731', '192.168.98.138.49341', '201.20.49.239.80', '562034569:562034972', '364925832'])]