簡體   English   中英

如何在元組列表中查找部分字符串匹配

[英]How to find partial string match in tuple list

我有一個元組列表

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

您想要在元組的兩個元素中搜索“Unknown”,而不僅僅是整個元組。

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

你可以把它分離成一個function:

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 的元組。

其工作方式: mapcontains_unknown應用於x中的每個元素,返回 boolean 值的可迭代對象。 any然后返回這些 boolean 值中的任何一個是否為真。 如果您選擇使用filter ,那么只會過濾 mylist 中滿足該條件的元素。 請注意, filter返回一個filter object,它是一個可迭代的但不是列表。 您可能希望將list應用於它以將其用作一個。

試試這個:

matches = [x for x in mylist if any(['Unknown' in str(y) for y in x])]

print(matches)

[(100, 'Unknown'), ('Unknown Player', 'BBB')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM