为什么在使用列表或 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.

分隔