Python: if any("str" in item for item in list) 如何使用?

Python: How to use if any("str" in item for item in list)?

下面的代码片段 returns 没有定义全局名称 '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() 的生成器表达式的范围内,您从函数返回的只是 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,