【问题标题】:Python: How to use if any("str" in item for item in list)?Python:如何使用 if any("str" in item for item in list)?
【发布时间】:2026-01-25 11:20:02
【问题描述】:

下面的代码 sn-p 返回一个错误,即未定义全局名称“item”。如果在列表中找到字符串,如何正确使用 if any(...) 搜索和打印字符串?

def walk:
    list = ["abc", "some-dir", "another-dir", ".git", "some-other-dir"]
    if any (".git" in item for item in list):
        print item,

【问题讨论】:

  • 你没有。如果要枚举所有匹配项,请不要使用any()
  • 另外,item 将只存在于您的 any 方法调用的范围内。这也是您收到 item 未定义错误消息的原因。
  • @MartijnPieters 你的意思是建议我改用“all”吗?如果我只想找到任何一个实例怎么办?在那种情况下,使用“任何”会是一个有效的用例吗?
  • @idjaw 是的,这对我来说很有意义,那么我该如何解决呢?通过将 item 定义为全局?
  • @SiddharthPatil 查看提供的答案。所有信息都在那里,并且解释得很好。

标签: python for-loop if-statement any


【解决方案1】:

你没有。如果要枚举所有匹配项,请不要使用any()item 这个名字只存在于传递给any() 的生成器表达式的范围内,你从函数中得到的只是TrueFalse。匹配的项目不再可用。

直接循环遍历列表并在if 测试中测试每个:

for item in lst:
    if ".git" in item:
        print item,

或使用列表推导,将其传递给str.join()(这是faster than a generator expression in this specific case):

print ' '.join([item for item in list if ".git" in item])

或者,使用 Python 3 语法:

from __future__ import print_function

print(*(item for item in list if ".git" in item))

如果你只想找到第一个这样的匹配,你可以使用next()

first_match = next(item for item in list if ".git" in item)

请注意,如果没有这样的匹配项,这会引发 StopIteration,除非你给 next() 一个默认值:

first_match = next((item for item in list if ".git" in item), None)
if first_match is not None:
    print first_match,

【讨论】:

  • @MartijnPeters,谢谢!