为什么在使用list或for循环时,生成器输出的结果会有所不同



行为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:

code:相同的代码(没有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连接列表的字符串表示,在该字符串表示中的每个字符之间放置一个空格。代码2连接字符串表示的列表,并用空格分隔每个字符串表示。

最新更新