[英]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
對於除0
或1
以外的任何值, 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.