【问题标题】:How does next() work in this python codenext() 在这个 python 代码中是如何工作的
【发布时间】:2017-04-30 22:50:49
【问题描述】:

我在这个答案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 的索引(或者我是否需要在txt 上做find())?

【问题讨论】:

标签: python python-2.7 next


【解决方案1】:

这里详细解释下如何使用next。

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

如果我们在列表/生成器为空时尝试调用next,上面的示例将触发StopIteration 异常,因为我们没有使用第二个参数来覆盖生成器为空时应该返回的内容。

next 真正在幕后做的事情称为类型的__next__() 方法。上课时要牢记这一点。

如果有什么不清楚的地方,请不要犹豫,我会详细说明。另请记住,print 是您的朋友,当您不了解发生了什么时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 2013-04-23
    • 2015-04-09
    • 2013-07-24
    • 2014-03-26
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多