2016-11-06 60 views
1

我有一個l中的單詞列表,如果它存在於l2中每個元組的第一個索引中,則刪除整個元組。在列表理解中的嵌套循環

我的代碼:

l = ['hi', 'thanks', 'thank', 'bye', 'ok', 'yes', 'okay'] 
l2 = [('hi how are u', 'doing great'), ('looking for me', 'please hold')] 
l3 = [k for k in l2 if not any(i in k[0] for i in l) ] 

莫名其妙的代碼不工作,我回來了L3空列表。

我想

l3 = [('looking for me', 'please hold')] 
+1

lo ** ok對我而言 –

回答

4

斯普利特k[0]得到的單詞列表:它檢查

[k for k in l2 if not any(i in k[0].split() for i in l)] 

這樣,如果i一個詞完全匹配。

彷彿k[0]不與任何的l開始它也可以解釋,那麼你可以這樣做:

[k for k in l2 if not k[0].startswith(tuple(l))] 
0

集使會員測試變得簡單。使用一個函數來過濾你的列表。

import operator 
first = operator.itemgetter(0 

l = ['hi', 'thanks', 'thank', 'bye', 'ok', 'yes', 'okay'] 
l2 = [('hi how are u', 'doing great'), ('looking for me', 'please hold')] 

def foo(t, l = set(l)): 
    t = set(first(t).split()) 
    return bool(l & t) 

l3 = [thing for thing in l2 if not foo(thing)]