“In”关键字无法检查元组列表中是否有字符串可用

问题描述 投票:2回答:2

得到一个包含字符串元组的列表,我需要检查给定的字符串是否在任何元组内,我能用我的代码做到这一点,但我正在寻找一种pythonic的方法来做这个并且“in”在这里不起作用,如namelst中的'GivenName'。

元组:

namelst= [('Travolta', 'Surname'), ('John', 'GivenName'), ('Joe', 'Nickname')]

传统代码:

for items in namelst:
    if('GivenName' in items):
        //Do Something
python-3.x list tuples
2个回答
2
投票

如果您需要知道是否匹配,只需使用any即可 -

if any('GivenName' in x for x in namelst):
    ... # do something 

any对由于理解而生成的每个布尔结果执行短路。一旦找到第一个True结果,迭代就会停止,结果就是True。否则,迭代完成,如果没有遇到True结果,则结果为False

将此操作与all进行对比,后者以相反的方式工作,返回它找到的第一个False值,否则返回True


如果你需要找到匹配的第一个索引,你可以使用next,这恰好非常有效,如果不需要,它将不会遍历整个namelst -

j = next((i for i, x in enumerate(namelst) if 'GivenName' in x), -1)
if j > -1:
    ... # do something 

在相关的说明中,如果你想找到匹配的每个索引,for循环不仅是最pythonic,而是最简单的解决方案。

for i, x in enumerate(namelst):
    if 'GivenName' in x:
        ... # do something

最后两个解决方案的假设是你需要索引来做某事(因此,使用enumerate)。


-1
投票

在If命令中删除大括号并尝试这样

if 'Given name' in items:

以上线路为我工作

© www.soinside.com 2019 - 2024. All rights reserved.