我知道答案可能非常簡單,但我完全被這段簡短的代碼所困擾。當我運行它時,該函式對輸入串列沒有影響。
def squareEven(array):
for idx, val in enumerate(array):
if idx % 2 == 0:
val = val * val
else:
val = val
return array
array = [1, 2, 4, 9, 20]
print(squareEven(array))
uj5u.com熱心網友回復:
當索引為偶數時,您還可以使用串列推導構造一個具有平方值的新串列。
def squareEven(array):
return [v**2 if i % 2 == 0 else v for (i, v) in enumerate(array)]
https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
uj5u.com熱心網友回復:
這里有兩種方法,一種不好,一種很好:
def squareEven(array):
for idx in range(len(array)):
if idx % 2 == 0:
array[idx] = array[idx] * array[idx]
return array
array = [1, 2, 4, 9, 20]
print(squareEven(array))
這更好,因為它不會損壞原始陣列作為副作用:
def squareEven(array):
new = []
for idx,val in enumerate(array):
if idx % 2 == 0:
new.append(val * val)
else:
new.append(val)
return new
array = [1, 2, 4, 9, 20]
print(squareEven(array))
uj5u.com熱心網友回復:
原因是該enumerate函式實際上并沒有改變它array本身,而只是回傳一個新的供你在回圈中使用。簡單的解決方案是將 保存enumerate(array)到另一個變數中并在函式結束時回傳它。請記住,最后你會得到一個列舉陣列。您可以將其映射為您最初傳遞的表單。
在函式中,您寫道您不保存實際結果。您使用的變數val是臨時的,更改它不會影響您傳遞的陣列。這意味著它val具有來自array但不參考元素的值。要解決此問題,您可以通過使用 參考它來直接更改元素idx。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419888.html
標籤:
上一篇:詢問用戶名直到它是唯一的
