我在这个答案https://stackoverflow.com/a/37401376/1727657中找到了我需要的一些代码。但我不明白next()
在此上下文中 。有人可以解释一下吗?
这是我用来理解它的简短测试脚本。我们的想法是查看测试字符串txt
是否包含myset
中的任何字符串,如果是,则包含哪一个字符串。它有效,但我不知道为什么。
myset = ['one', 'two', 'three']
txt = 'A two dog night'
match = next((x for x in myset if x in txt), False)
if match: #if match is true (meaning something was found)
print match #then print what was found
else:
print "not found"
我的下一个问题是询问next()
是否会给我match
的索引(或者我需要find()
上的txt
)?
答案 0 :(得分:1)
解释下一步的使用方法。
match = next((x for x in myset if x in txt), False)
这将返回第一个参数中传递的生成器表达式创建的第一个/下一个值(在本例中为匹配的实际单词)。如果生成器表达式为空,则将返回False
。
编写代码的人可能只对第一场比赛感兴趣,因此使用了next
。
我们可以使用:
matches = [x for x in myset if x in txt]
并使用len
来确定点击次数。
显示next
的一些简单用法:
generator = (x for x in myset)
print generator
print next(generator)
print next(generator)
print next(generator)
输出:
<generator object <genexpr> at 0x100720b90>
one
two
three
如果我们在列表/生成器为空时尝试调用StopIteration
,上面的示例将触发next
异常,因为我们不使用第二个参数来覆盖生成器时应该返回的内容是空的。
next
真正在幕后做的是类型的__next__()
方法。这对于在上课时保持头脑很重要。
如果有什么不清楚,请不要犹豫,我会详细说明。还要记住,当你不明白发生了什么时,print
是你的朋友。