枚举哪里出错了?
Where am I going wrong with enumerate?
我知道答案可能非常简单,但我绝对坚持这一小段代码。当我 运行 它时,该函数对输入列表没有影响。
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))
原因是 enumerate
函数实际上并没有改变 array
本身,只是 return 是供您在循环中使用的新函数。简单的解决方案是将 enumerate(array)
保存到另一个变量中,并在函数末尾保存 return 。请记住,最后您将得到一个枚举数组。您可以将其映射以转换为您最初通过的形式。
在函数中,你写了你不保存实际结果。您使用的变量 val
是临时变量,更改它不会影响您传递的数组。这意味着 val
具有来自 array
的值但不引用该元素。要解决此问题,您可以通过使用 idx
.
引用它来直接更改元素。
这里有两种方法,一种不好,一种很好:
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))
当索引为偶数时,您还可以使用列表理解来构造一个具有平方值的新列表。
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
我知道答案可能非常简单,但我绝对坚持这一小段代码。当我 运行 它时,该函数对输入列表没有影响。
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))
原因是 enumerate
函数实际上并没有改变 array
本身,只是 return 是供您在循环中使用的新函数。简单的解决方案是将 enumerate(array)
保存到另一个变量中,并在函数末尾保存 return 。请记住,最后您将得到一个枚举数组。您可以将其映射以转换为您最初通过的形式。
在函数中,你写了你不保存实际结果。您使用的变量 val
是临时变量,更改它不会影响您传递的数组。这意味着 val
具有来自 array
的值但不引用该元素。要解决此问题,您可以通过使用 idx
.
这里有两种方法,一种不好,一种很好:
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))
当索引为偶数时,您还可以使用列表理解来构造一个具有平方值的新列表。
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