簡體   English   中英

List Comprehension輸出不同於嵌套的for循環?

[英]List Comprehension output different than nested for loops?

我真是茫然為什么列表理解會產生與嵌套循環一樣的不同輸出。 誰能提供任何見解?

清單理解:

[(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

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM