我真的不明白为什么这个列表理解会产生不同的输出,而我认为是嵌套for循环的等效输出。有人能透露一些见解吗?你知道吗
列表理解:
[(n ** 5, m ** 3) for n in range(3) for m in range(5) if m % 2 == 0]
结果如下:
[(0, 0), (0, 8), (0, 64), (1, 0), (1, 8), (1, 64), (32, 0), (32, 8), (32, 64)]
但是,我认为是等效的嵌套For循环:
L = []
for n in range(3):
for m in range(5):
if m % 2 == 0:
n = n**5
m = m**3
vals = (n,m)
L.append(vals)
L
结果如下:
[(0, 0),
(0, 8),
(0, 64),
(1, 0),
(1, 8),
(1, 64),
(32, 0),
(33554432, 8),
(42535295865117307932921825928971026432, 64)]
为什么两者的产出有差异?你知道吗
嵌套循环不等同于列表理解,因为您更改了内部循环中的
n
:对于除
0
或1
以外的任何值,这将以指数方式增加n
。因此,在外循环的最后一次迭代中,设置了n = 2
,但随后将2 ** 5 = 32
分配给n
,然后再分配32 ** 5 = 33554432
。你知道吗使用其他名称:
或者干脆不使用中间变量:
相关问题 更多 >
编程相关推荐