簡體   English   中英

在python中枚舉到For循環

[英]Enumerate in python to For loop

我想將枚舉轉換為 for 循環。

subsets = [0]*15
subsets[0] = 2
subsets = [index + subsets[subsets[index]] for (index,value) in enumerate(subsets)]
print(subsets)

和類似的

subsets = [0]*15
subsets[0] = 2
for index,value in enumerate(subsets):
  subsets[index] = index + subsets[subsets[index]]
print(subsets)

但我得到了不同的結果。 請幫我解決這個問題。

在第一個版本中,您將根據子集的初始值計算所有內容,在第二個版本中,您將就地更新元素。

特別是,在第一次迭代中,您將執行subsets[0] = 0 + subsets[subsets[0]] = 0 + subsets[2] = 0 而對於第一個代碼subsets[0]將是2直到執行結束。

等效代碼是

subsets = [0]*15
subsets[0] = 2
tmp = [0] * 15
for index,value in enumerate(subsets):
  tmp[index] = index + subsets[subsets[index]]
subsets = tmp
print(subsets)

在您的第一種情況下, subsets列表的元素不會更改,因為您創建了一個新的subsets列表(兩個名稱相同)並在此列表中添加值。

但是在第二種情況下,您在迭代列表值時更新了列表值,這就是您得到不同輸出的原因。]

執行您的第二個代碼。

subsets = [0]*15
subsets[0] = 2
for index,value in enumerate(subsets):
  subsets[index] = index + subsets[subsets[index]
print(subsets) ## [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  1. 在第一次迭代中(index=0)index + subsets[subsets[index]] ( subsets[index]=2 ) 和subsets[index]=2 ( subsets[2]=0 ) 結果現在等於 0 + 0 即 0。
  2. 在第二次迭代(index=1)index + subsets[subsets[index]]subsets[index]=0 )和之后的subsets[0]=0 (因為你在第一次迭代中將第零個值更改為 0 ) ( subsets[2]=0 ) 結果現在等於 1 + 0,即 1。

同樣,您的index + subsets[subsets[index]]總和始終等於迭代的索引值。

我希望你明白

當您在第二個示例中編寫subsets[index] =時,原始subsets的值將被覆蓋並用於下一次迭代等。

這是編寫循環的方法,如果您不想enumerate ,請使用for index in range(len(subsets))subsets[subsets[index]]而不是subsets[value]

output = [] 
subsets = [2] + [0]*14
for index, value in enumerate(subsets): 
    output.append(index + subsets[value])
print(output)

暫無
暫無

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

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