什么python内置函数可以将某些函数应用于就地列表的每个元素?
我有函数sqr(n)和 list array。是否有 python 内置函数将sqr(n)应用于数组的每个元素就地(元素在数组内更改)?还需要使用map()函数或其他内置函数的一些技巧。
当然,这可以使用map()函数来完成,但它会创建一个迭代器,并且您会得到一个新列表(旧列表不会改变):
def sqr(n):
return n ** 2
array = [1, 2, 3, 4, 5]
array = list(map(sqr, array)) # have to reassign name to new list but elements don't change in old one.
print(array) # output: [1, 4, 9, 16, 25]
我想要这样的东西:
def sqr(n):
return n ** 2
array = [1, 2, 3, 4, 5]
some_built_in_function(sqr, array)
print(array) # output: [1, 4, 9, 16, 25]
回答
没有内置函数,但您可以使用map和 切片分配来完成相同的结果。
array[:] = map(sqr, array)
(如果你需要一个表达式而不是一个语句,你可以使用怪物
array.__setitem__(slice(None), map(sqr, array))
这基本上是切片分配的实现方式。)