2017-03-01 84 views
0

我需要比較單個列表中的元素。比如這裏有我的兩個列表:比較兩個不同大小的列表列表

listing = [['tl.48', 'tl.49', 'tl.57'], ['tl.23', 'tl.45', 'tl.12']]; 
search = [['tl.48','tl.57']]; 

我現在的目標是尋找每個項目尋找到每個項目列表,如果兩個項目'tl.48''tl.57'在再上市相匹配的項目,我選擇從該項目列表並將其附加到空列表中。 listing[0]具有3個元素的尺寸,並且search[0][0]search[0][1]存在於listing[0][0]listing[0][2]。我怎樣才能得到listing[0]在一個單獨的列表並追加它。如果listing[0]的大小爲4,並且search[0][0]search[0][1]出現在listing[0]中,我仍然會將listing[0]添加到新列表中。我該怎麼做?

謝謝。

+1

我發現你的描述難以遵循。如果你給出了預期的輸出結果,可能會更容易... –

+0

追加只是用'my_list.append(my_new_element)'完成的。那麼這有什麼問題? – Julien

回答

1
[lst for lst in listing if all([True if term in lst else False for term in search[0]])] 

結果:[['tl.48', 'tl.49', 'tl.57']]

此,對於每個listinglist,檢查每一個搜索詞是inlist,只有追加,如果all這些條款的存在。

注意:搜索是包含單個列表的列表,這就是我們使用search[0]的原因。如果它只是元素列表,請改爲使用search

大致相當於(相同的結果,不同的方法):

result = [] 
for lst in listing: 
    valid = True 
    for term in search[0]: 
     if term not in lst: 
      valid = False 
    if valid: 
     result.append(lst) 

如果這將是真實的目錄比較(其中searchlisting是列表的兩個列表),你需要找到一個更強大的解決方案

+0

你可以簡化第一行'all(搜索[0]中的術語lst) –