通过Python获取计数超过特定数量的列表项

时间:2010-11-04 15:32:03

标签: python list

我有嵌套列表:

   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 个答案:

答案 0 :(得分:2)

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

>>> 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']]

答案 1 :(得分:2)

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

result = [ d for d in ip if d[2] == ip[0][2] ]

答案 2 :(得分:2)

[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 :(得分:1)

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

>>> 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'])]