为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2023-10-18 16:18:00
我有一个元组列表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它以将其用作一个。


查看完整回答
反对 回复 2023-10-18
?
繁星点点滴滴

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


查看完整回答
反对 回复 2023-10-18
  • 2 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信