【问题标题】:"In" keyword doesn't work to check if string available in the list of tuples“In”关键字不能检查元组列表中的字符串是否可用
【发布时间】:2017-12-27 06:12:20
【问题描述】:

得到一个包含字符串元组的列表,我需要检查给定的字符串是否在任何元组内,我可以用我的代码来做到这一点,但我正在寻找一种 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


【解决方案1】:

如果你想知道是否匹配,只需使用any就足够了 -

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

any 对作为理解结果生成的每个布尔结果执行短路。一旦找到first 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 循环不仅是最 Python 的,而且是最简单的解决方案。

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

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

【讨论】:

    【解决方案2】:

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

    if 'Given name' in items:

    上面一行对我有用

    【讨论】:

    • 问题不在于 if 命令,我正在寻找一种 Python 方式来检查这一点,并想了解为什么“in”关键字无法按照问题中的说明工作。
    • 为我工作。如果我理解错了你的问题,请原谅!
    • 返回 False 是否有效?因为这意味着它不起作用。
    • @KeyserSoze 你在项目中做“名字”,我在 namelst 中寻找“名字”,它是元组列表。而 items 是单个元组。
    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2016-10-24
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多