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

时间:2017-12-27 06:12:20

标签: python-3.x list tuples

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

元组:

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

传统代码:

for items in namelst:
    if('GivenName' in items):
        //Do Something

2 个答案:

答案 0 :(得分: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 :(得分:-1)

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

  

if 'Given name' in items:

以上为我工作