有一个包含字符串元组的列表,我需要检查给定的字符串是否在任何元组内,我能用我的代码片段做到这一点,但我正在寻找一种pythonic方式这样做并且“in”在这里不起作用,比如namelst中的'GivenName'。
元组:
namelst= [('Travolta', 'Surname'), ('John', 'GivenName'), ('Joe', 'Nickname')]
传统代码:
for items in namelst:
if('GivenName' in items):
//Do Something
答案 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:
以上为我工作