如何使迭代器在其内部保留一些价值?
How make iterator that keep some value inside itself?
第一个代码:
for i in range(2,4):
q = i
print(list(q+j for j in range(q)))
Returns:
[2,3]
[3,4,5]
但是第二个代码:
zzz=[]
for i in range(2,4):
q = i
zzz.append(q+j for j in range(q))
for i in zzz:
print(list(i))
Returns:
[3,4]
[3,4,5]
为什么结果不同?
如何使迭代器将 q 值保留在内部(在第二个代码中)?
谢谢
zzz=[]
for i in range(2,4):
q = i
zzz.append([q+j for j in range(q)])
for i in zzz:
print(list(i))
这将产生预期的结果。
注意 zzz.append([...])
中的方括号。这将评估列表中的生成器表达式。 (...)
语法适用于延迟执行的生成器,它将使用 q
的最后一个值。阅读此处了解更多信息 https://code-maven.com/list-comprehension-vs-generator-expression
如果你想要生成器在你的列表zzz
中,你可以定义一个returns这个生成器的函数,例如:
def get_generator(q):
return (q+j for j in range(q))
zzz=[]
for i in range(2,4):
zzz.append(get_generator(i))
for i in zzz:
print(list(i))
打印:
[2, 3]
[3, 4, 5]
第一个代码:
for i in range(2,4):
q = i
print(list(q+j for j in range(q)))
Returns: [2,3] [3,4,5]
但是第二个代码:
zzz=[]
for i in range(2,4):
q = i
zzz.append(q+j for j in range(q))
for i in zzz:
print(list(i))
Returns: [3,4] [3,4,5]
为什么结果不同? 如何使迭代器将 q 值保留在内部(在第二个代码中)? 谢谢
zzz=[]
for i in range(2,4):
q = i
zzz.append([q+j for j in range(q)])
for i in zzz:
print(list(i))
这将产生预期的结果。
注意 zzz.append([...])
中的方括号。这将评估列表中的生成器表达式。 (...)
语法适用于延迟执行的生成器,它将使用 q
的最后一个值。阅读此处了解更多信息 https://code-maven.com/list-comprehension-vs-generator-expression
如果你想要生成器在你的列表zzz
中,你可以定义一个returns这个生成器的函数,例如:
def get_generator(q):
return (q+j for j in range(q))
zzz=[]
for i in range(2,4):
zzz.append(get_generator(i))
for i in zzz:
print(list(i))
打印:
[2, 3]
[3, 4, 5]