下面的代码段会返回一个错误,即未定义全局名称“item”。如果在列表中找到,如何正确搜索和打印字符串,如何使用(...)?
def walk:
list = ["abc", "some-dir", "another-dir", ".git", "some-other-dir"]
if any (".git" in item for item in list):
print item,
答案 0 :(得分:9)
你没有。如果要枚举所有匹配项,请不要使用list2 <- list1[lapply(list1, length) > 0]
list2
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d" "e"
。名称any()
仅存在于传递给item
的生成器表达式的范围内,您从函数返回的所有内容都是any()
或True
。匹配的项目不再可用。
直接循环遍历列表并在False
测试中对每个测试进行测试:
if
或使用列表理解,将其传递给for item in lst:
if ".git" in item:
print item,
(这是faster than a generator expression in this specific case):
str.join()
或者,使用Python 3语法:
print ' '.join([item for item in list if ".git" in item])
如果您只想找到第一个这样的匹配,可以使用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()