2010-11-04 40 views
0

數超過指定數量的我有嵌套列表:具有獲取列表項被Python

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

您使用索引1-5,但Python列表爲0索引。這是錯誤的嗎? – 2010-11-04 15:35:41

+0

你能否提供一個更清晰的例子來顯示你有什麼(即整個原始列表)以及你想要輸出的是什麼? – dtlussier 2010-11-04 15:38:46

+0

當你說「超過3」時 - 你的意思是超過3個元素?您提供的示例數據並不以任何方式指示此行爲。請確保您的問題描述和樣本數據彼此一致。 – 2010-11-04 15:42:10

回答

2

要返回結果,其中ip[i][2] == ip[0][2]使用列表理解:

result = [ d for d in ip if d[2] == ip[0][2] ] 
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']] 
+0

不是很清楚,但我不認爲這是什麼OP想要 – katrielalex 2010-11-04 15:47:27

+0

是的,他已經兩次改變了他的要求,已經完全編輯了...... – 2010-11-04 15:50:21

+0

抱歉我的錯誤,tanx爲你提供幫助。 – Am1rr3zA 2010-11-04 15:52:16

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