如何在if语句之外打印匹配字符串?
strings = ("string1", "string2", "string3")
for line in file:
if any(s in line for s in strings):
print "s is:",s
表示:
NameError: global name 's' is not defined
答案 0 :(得分:4)
您可以使用生成器,并呼叫next(..)
:
strings = ("string1", "string2", "string3")
for line in file:
result = next((s for s in strings if s in line),None)
if result is not None:
print "s is:",s
如果找不到匹配并检查None
的{{1}},我们会在next
中使用s
作为后备值。
请注意,这只会匹配匹配的第一个。如果还有更多,这些将不会被激活。但是,您可以使用None
循环来修改代码:
for
答案 1 :(得分:4)
正如any
document所说:
如果iterable的任何元素为true,则返回
True
。如果是可迭代的 空,返回False
。
并且您无法访问any(...)
(生成器表达式范围)范围之外的中间变量。
为了实现这一目标,您可以改为:
strings = ("string1", "string2", "string3")
existed = None
for line in file:
for s in strings:
if s in line:
existed = s
break
if existed:
print "s is:",s
答案 2 :(得分:2)
你不能,变量只在生成器内声明。 您必须为此添加另一个for循环:
strings = ("string1", "string2", "string3")
for line in file:
for s in strings:
if s in line:
print "s is:",s
但您可以使用itertools.product
答案 3 :(得分:0)
我同意@Willem Van Onsem的评论。
strings = ("string1", "string2", "string3")
for line in file:
result = next((s for s in strings if s in line),None)
if result is not None:
print "s is:",result