得到一个包含字符串元组的列表,我需要检查给定的字符串是否在任何元组内,我能用我的代码做到这一点,但我正在寻找一种pythonic的方法来做这个并且“in”在这里不起作用,如namelst中的'GivenName'。
元组:
namelst= [('Travolta', 'Surname'), ('John', 'GivenName'), ('Joe', 'Nickname')]
传统代码:
for items in namelst:
if('GivenName' in items):
//Do Something
如果您需要知道是否匹配,只需使用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
)。
在If命令中删除大括号并尝试这样
if 'Given name' in items:
以上线路为我工作