我有一個元組列表mylist = [(100, 'Unknown'), ('Unknown Player', 'BBB'), (20, 90), (40, 'DDD')]我想返回包含該單詞的元組列表Unknown我試過:matches = [x for x in mylist if 'Unknown' in x]但這會返回:(100,'Unknown)我想返回:[(100, 'Unknown'), ('Unknown Player', 'BBB')]
2 回答

aluckdog
TA貢獻1847條經驗 獲得超7個贊
您想要在元組的兩個元素中搜索“未知”,而不僅僅是整個元組。
matches = [x for x in mylist if (isinstance(x[0], str) and 'Unknown' in x[0]) or (isinstance(x[1], str) and 'Unknown' in x[1])]
您可以將其分成一個函數:
def contains_unknown(a): return isinstance(a, str) and 'Unknown' in a matches = [x for x in mylist if contains_unknown(x[0]) or contains_unknown(x[1])]
對于任意長度的元組,您可以使用內置迭代器函數來編寫
matches = [x for x in mylist if any(map(contains_unknown, x))]
甚至
matches = filter(lambda x: any(map(contains_unknown, x)), mylist)
當然這僅適用于長度為 2 的元組。
其工作方式:map
應用于contains_unknown
中的每個元素x
,返回一個可迭代的布爾值。any
然后返回這些布爾值中的任何一個是否為 True。如果您選擇使用filter
,則僅過濾 mylist 中滿足該條件的元素。請注意,它filter
返回一個filter
對象,該對象是一個可迭代對象,但不是一個列表。您可能想申請list
它以將其用作一個。

繁星點點滴滴
TA貢獻1803條經驗 獲得超3個贊
嘗試這個:
matches = [x for x in mylist if any(['Unknown' in str(y) for y in x])] print(matches) [(100, 'Unknown'), ('Unknown Player', 'BBB')]
添加回答
舉報
0/150
提交
取消