Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么python内置函数可以将某些函数应用于列表中的每个元素?_Python_Python 3.x_List - Fatal编程技术网

什么python内置函数可以将某些函数应用于列表中的每个元素?

什么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

我有函数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) # 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
返回一个迭代器,对列表片的赋值不会创建新的列表。是的,我想这就是我想要的,谢谢:)