我有嵌套列表:
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']
答案 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'])]