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()
的生成器表达式的范围内,您从函数返回的只是 True
或 False
。匹配的项目不再可用。
只需直接遍历列表并在 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,
下面的代码片段 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()
的生成器表达式的范围内,您从函数返回的只是 True
或 False
。匹配的项目不再可用。
只需直接遍历列表并在 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,