为什么在使用列表或 for 循环时生成器输出的结果会有所不同
Why do the results vary for generator output when using list or a for loop
行为 1
加入代码:
print (' '.join(str(list(random.randrange(100) for j in range(4)))))
输出:
[ 8 2 , 8 3 , 1 2 , 7 1 ]
我的预期是:
[82,83,12,71]
观察:
我正在使用 list() 函数,因为我需要计算生成器表达式。我认为这是我出错的地方,我不应该将 list() 与生成器一起使用吗?
行为 2:
代码:相同的代码(没有 list())但环绕另一个 for 循环:
for _ in range(2**2):
print (' '.join(str(random.randrange(100)) for i in range(4)))
输出:
98 72 56 63
71 12 45 63
83 91 65 89
31 45 65 95
观察:
这里我得到了预期的输出。但我不明白为什么这与带有列表的行为 1 相比会起作用。
我的理解是 for 循环和列表都可以互换使用以强制从生成器输出。在理解 str() 在行为 2 中取整数但将输出视为行为 1 的字符序列的区别时,我缺少什么?
代码 #1 正在连接列表的字符串表示形式,在该字符串表示形式的每个字符之间放置一个 space。代码 2 加入了一个字符串表示列表,每个字符串用 space.
分隔
行为 1
加入代码:
print (' '.join(str(list(random.randrange(100) for j in range(4)))))
输出:
[ 8 2 , 8 3 , 1 2 , 7 1 ]
我的预期是:
[82,83,12,71]
观察:
我正在使用 list() 函数,因为我需要计算生成器表达式。我认为这是我出错的地方,我不应该将 list() 与生成器一起使用吗?
行为 2:
代码:相同的代码(没有 list())但环绕另一个 for 循环:
for _ in range(2**2):
print (' '.join(str(random.randrange(100)) for i in range(4)))
输出:
98 72 56 63
71 12 45 63
83 91 65 89
31 45 65 95
观察:
这里我得到了预期的输出。但我不明白为什么这与带有列表的行为 1 相比会起作用。 我的理解是 for 循环和列表都可以互换使用以强制从生成器输出。在理解 str() 在行为 2 中取整数但将输出视为行为 1 的字符序列的区别时,我缺少什么?
代码 #1 正在连接列表的字符串表示形式,在该字符串表示形式的每个字符之间放置一个 space。代码 2 加入了一个字符串表示列表,每个字符串用 space.
分隔