[英]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]
(index=0)
, index + subsets[subsets[index]]
( subsets[index]=2
) 和subsets[index]=2
( subsets[2]=0
) 結果現在等於 0 + 0 即 0。(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.