在Python

时间:2016-02-29 10:10:15

标签: python square

我来自MATLAB背景,根据其他堆栈中的答案,到目前为止这个简单的操作似乎在Python中实现起来非常复杂。通常,大多数答案都使用for循环。

到目前为止我见过的最好的是

import numpy
start_list = [5, 3, 1, 2, 4]
b = list(numpy.array(start_list)**2)

有更简单的方法吗?

4 个答案:

答案 0 :(得分:4)

最具可读性的可能是列表理解:

start_list = [5, 3, 1, 2, 4]
b = [x**2 for x in start_list]

如果您是功能类型,则需要map

b = map(lambda x: x**2, start_list)  # wrap with list() in Python3

答案 1 :(得分:4)

只需使用列表理解:

start_list = [5, 3, 1, 2, 4]
squares = [x*x for x in start_list]

注意:作为次要优化,执行x*x的速度要快于x**2(或pow(x, 2))

答案 2 :(得分:3)

您可以使用列表理解:

[i**2 for i in start_list]

如果您使用的是numpy,则可以使用tolist方法:

In [180]: (np.array(start_list)**2).tolist()
Out[180]: [25, 9, 1, 4, 16]

np.power

In [181]: np.power(start_list, 2)
Out[181]: array([25,  9,  1,  4, 16], dtype=int32)

答案 3 :(得分:3)

注意:由于我们已经有vanilla Python, list comprehensions and map的重复项,并且我没有找到重复的方法来对 1D numpy数组进行定位,我以为我会保留我的使用numpy

的原始答案

numpy.square()

如果您是从MATLAB转到Python,那么尝试使用numpy肯定是正确的。使用numpy,您可以使用numpy.square()返回输入的元素方块:

>>> import numpy as np
>>> start_list = [5, 3, 1, 2, 4]
>>> np.square(start_list)
array([25,  9,  1,  4, 16])

numpy.power()

还有一个更通用的numpy.power()

>>> np.power(start_list, 2)
array([25,  9,  1,  4, 16])