什么python内置函数可以将某些函数应用于列表中的每个元素?
我有函数sqr(n)和列表数组。 是否有python内置函数将sqr(n)应用于数组中的每个元素(元素在数组中发生变化)? 还需要使用map()函数或其他内置函数的一些技巧 当然,这可以使用map()函数来完成,但它会创建一个迭代器,然后您会得到一个新列表(旧列表不会更改): 我想要这样的东西:什么python内置函数可以将某些函数应用于列表中的每个元素?,python,python-3.x,list,Python,Python 3.x,List,我有函数sqr(n)和列表数组。 是否有python内置函数将sqr(n)应用于数组中的每个元素(元素在数组中发生变化)? 还需要使用map()函数或其他内置函数的一些技巧 当然,这可以使用map()函数来完成,但它会创建一个迭代器,然后您会得到一个新列表(旧列表不会更改): 我想要这样的东西: def sqr(n): return n ** 2 array = [1, 2, 3, 4, 5] some_built_in_function(sqr, array) print(array
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]
没有内置函数,但自己编写一个很容易:
def mapinplace(l, fun):
for i, val in enumerate(l):
l[i] = fun(val)
array = [1, 2, 3, 4, 5]
mapinplace(array, sqr)
没有内置函数,但自己编写一个很容易:
def mapinplace(l, fun):
for i, val in enumerate(l):
l[i] = fun(val)
array = [1, 2, 3, 4, 5]
mapinplace(array, sqr)
没有内置函数,但您可以使用
map
和切片分配来实现相同的结果
array[:] = map(sqr, array)
(如果你需要一个表达式而不是一个语句,你可以使用怪物
array.__setitem__(slice(None), map(sqr, array))
这就是切片分配的基本实现方式。
)没有内置函数,但您可以使用
map
和切片分配来实现相同的结果
array[:] = map(sqr, array)
(如果你需要一个表达式而不是一个语句,你可以使用怪物
array.__setitem__(slice(None), map(sqr, array))
这就是切片分配的基本实现方式。
)您可以使用如下列表理解来实现此目的
array = [1, 2, 3, 4, 5]
array = [i**2 for i in array]
print(array)
您可以使用下面的列表理解来实现这一点
array = [1, 2, 3, 4, 5]
array = [i**2 for i in array]
print(array)
因为你很可能是在数字上操作,所以我将发布强制性的numpy解决方案。Numpy并不是完全内置的,但它非常接近:例如,python中的
@
操作符就是为Numpy设计的
仅当输入是numpy数组而不是列表时,此解决方案才可用:
np.square(x, out=x)
大多数元素级numpy操作都可以像这样就地完成。因为您很可能是在数字上操作,所以我将发布强制性numpy解决方案。Numpy并不是完全内置的,但它非常接近:例如,python中的
@
操作符就是为Numpy设计的
仅当输入是numpy数组而不是列表时,此解决方案才可用:
np.square(x, out=x)
大多数元素方面的numpy操作都可以像这样就地完成。我不这么认为,请参见列表immutable@WasifHasan列表不是不可更改的我不认为有内置函数可以做到这一点。我不这么认为,列表是不可更改的immutable@WasifHasan列表不是不可变的我不认为有内置函数可以做到这一点。或者
l[:]=map(fun,l)
或l[:]=map(fun,l)
。这将创建一个新列表,而不是就地修改原始列表。它只会在完成后将新列表分配给原始名称。如果要修改作为参数传递给函数的列表,则区别很重要,因为分配给参数不会影响原始列表。列表理解是有效的与列表相同(映射(sqr,数组))
问题中提到的OP。这会创建一个新列表,而不是就地修改原始列表。它只会在完成后将新列表分配给原始名称。如果要修改作为参数传递给函数的列表,区别很重要,因为分配给参数不会影响原始l列表理解实际上与OP在问题中提到的list(map(sqr,array))
相同。也许Python需要一个新的赋值操作符:array[:]=sqr
:)好吧,这就是numpy的用途。幸运的是,它最终生成了一个临时列表,立即被丢弃,对吗?这在某些应用程序中可能很重要。@MarkRansom不,它在Python 3中不起作用,map
返回迭代器,对列表片的赋值不会创建新的列表。是的,我想这就是我想要的,谢谢:)也许Python需要一个新的赋值运算符:array[:]=sqr
:)嗯,这就是numpy的用途,幸运的是,它最终会生成一个临时列表,并立即被丢弃,对吗?这在某些应用程序中可能很重要。@MarkRansom不,在Python3中它不重要,map
返回一个迭代器,对列表片的赋值不会创建新的列表。是的,我想这就是我想要的,谢谢:)