只用 for 回圈乘以奇數索引為什么它不起作用?
myList = [1, 2, 3, 4, 5]
index = 0
for num in myList:
if index % 2 != 0:
num *= 2
index = 1
print(myList) # here the output still the same list
我希望輸出為 [1, 4, 3, 8, 5]
uj5u.com熱心網友回復:
編輯:我看到您已經編輯了您的問題,您修復了檢查串列中的專案是否為奇數的第一個問題。然而,您仍在使用 迭代串列for num in myList,它在引擎蓋下創建了一個Iterator在您的串列上移動的 。這意味著無論你做什么num,你只是在修改num而不是myList[index]。為了直接修改串列,您需要參考myList[index]. 我強烈建議您考慮使用enumerate,請參閱我的原始答案以了解如何將其應用于您的用例。
你的問題是你正在檢查里面的值myList是偶數還是奇數而不是它的索引。
此外,num在回圈內修改不會修改原始串列中的值(這很容易被注意到,因為在“修改”串列中奇數值不會相乘)。
使用range(len())習語回圈遍歷您的串列將產生以下代碼:
myList = [1, 2, 3, 4, 5]
for idx in range(len(myList)):
if idx % 2 != 0:
myList[idx] *= 2
print(myList)
您可以使用enumerate和list comprehension進一步縮短回圈/分配:
myList = [1, 2, 3, 4, 5]
myList = [num * 2 if idx % 2 != 0 else num for idx, num in enumerate(myList)]
print(myList)
uj5u.com熱心網友回復:
您的方式不起作用,因為您沒有將 'num' 分配回串列中。
newList = [v*2 if idx % 2 != 0 else v for idx, v in enumerate(myList)]
uj5u.com熱心網友回復:
代碼中有兩個問題-
- 您需要檢查索引是奇數還是偶數,而不是元素。
- 修改
num不會修改串列中的相應元素,因為它不參考串列中的元素。
myList = [1, 2, 3, 4, 5]
for idx in range(len(myList)):
if idx % 2 != 0:
myList[idx]*=2
uj5u.com熱心網友回復:
我會使用自然串列語法 L[start:stop:step]
myList = [1, 2, 3, 4, 5]
for i in mylist[1::2]:
myList[i] = myList[i] * 2
print(myList) # [1, 4, 3, 8, 5]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400805.html
