我想从列表中定义一个生成器,它将一次输出一个元素,然后以适当的方式使用此生成器对象。
a = ["Hello", "world", "!"]
b = (x for x in a)
c = next(b, None)
while c != None:
print c,
c = next(b, None)
此处while
方法有什么不对或可以改进吗?有没有办法避免在循环之前分配'c'?
谢谢!
答案 0 :(得分:7)
为什么要使用while
循环?在Python中,for
循环绝对是为此设计的:
a = ["Hello", "world", "!"]
b = (x for x in a)
for c in b:
print c,
如果你出于某种原因陷入while
实施,你当前的实施可能是你能做的最好的,但它有点笨拙,你不觉得吗?
答案 1 :(得分:3)
澄清:你的意思是生成器表达式而不是生成器 - 后者是一个包含至少一个 yield
的函数定义语句/表达
同意早期的海报......你应该使用 for
循环几乎所有东西。我很少使用 while
循环,这些循环被降级为运行无限循环的简单计数器或服务器。 : - )
您也可以将genexp放在与 for
循环相同的一行...
a = ["Hello", "world", "!"]
for c in (x for x in a):
print c,
...因为genexp不能重复使用。但是,它看起来并不可读。这也违背了这项工作的目的。为什么不只是迭代自己?
for c in ["Hello", "world", "!"]:
print c,
你已经用完了内存来制作清单;为什么在不是nec时创建一个genexp?