2013-09-22 62 views
1

我想遍歷python 2.7.5中的列表列表,並返回第一個值在第二個列表中找到的地方,如下所示:使用python查找列表中的匹配值

#python 2.7.5 
list1 = ['aa', 'ab', 'bb', 'bc', 'cc'] 
list2 = [['aa', 1, 3, 7],['de', 2, 2, 1],['bc', 3, 4, 4]] 

list3 = [] 
for x in list1: 
    for y in list2: 
     if x == y: 
      list3.append(y) 

所以我想列表3包含[['aa',1,3,7],['bc', 3, 4, 4]],但我只是得到整個list2。

+1

咦?它不會給你整個'list2',它會給你一個空的列表。請再次檢查代碼。 –

+1

第二個結構需要列表而不是單個字典的列表是否有特定的原因? – geoffspear

+1

在這種情況下,我認爲這將有助於告訴我們,你想用你的程序/腳本(不僅僅是提供的代碼片段)實現什麼。因爲乍看起來,我猜想有更好的數據結構來解決你的問題(如字典) – cyphorious

回答

5

嘗試一個更簡單的辦法是更接近你想要什麼:

for e in list2: 
    if e[0] in list1: 
     list3.append(e) 

你需要e[0]因爲list2是列表的列表。

list3 = filter(lambda e: e[0] in list1, list2) 

或使用list comprehension:您也可以在單行使用filter() function寫這篇

list3 = [e for e in list2 if e[0] in list1] 
1

你的代碼中存在一個錯誤。您需要x == y [0]而不是x == y。後者將字符串與列表進行比較。

您也可以使用列表理解

>>> [x for x in list2 if x[0] in list1] 
[['aa', 1, 3, 7],['bc', 3, 4, 4]] 
1

它看起來像你的問題,是因爲你正試圖比較元素的列表,對列表元素列表。

如果通過for循環步驟,你會發現在你的第一次迭代您比較 'aa'['aa', 1, 3, 7],這可能不是你想要做什麼。

如果你只是比較的第一個元素,你需要將for循環更改爲:

for x in list1: 
    for y in list2: 
     if x == y[0]: 
      list3.append(y)