列表理解输出与嵌套for循环不同?

2024-04-26 20:47:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的不明白为什么这个列表理解会产生不同的输出,而我认为是嵌套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)]

为什么两者的产出有差异?你知道吗


Tags: in列表forifrange差异appendvals
1条回答
网友
1楼 · 发布于 2024-04-26 20:47:13

嵌套循环不等同于列表理解,因为您更改了内部循环中的n

n = n**5

对于除01以外的任何值,这将以指数方式增加n。因此,在外循环的最后一次迭代中,设置了n = 2,但随后将2 ** 5 = 32分配给n,然后再分配32 ** 5 = 33554432。你知道吗

使用其他名称:

L = []
for n in range(3):
    for m in range(5):
        if m % 2 == 0:
            n_power_5 = n**5
            m_power_3 = m**3
            vals = (n_power_5, m_power_3)
            L.append(vals)

或者干脆不使用中间变量:

for n in range(3):
    for m in range(5):
        if m % 2 == 0:
            L.append((n**5, m**3))

相关问题 更多 >