我被告知写一个函数square(a),它接受一个数字数组a,并返回一个包含每个平方值的数组。一开始我有
def square(a): for i in a: print i**2
但是这不起作用,因为我正在打印,而且不像我被要求的那样返回。所以我试了试
def square(a): for i in a: return i**2
但是这只平方了我的数组的最后一个数字。我怎么能让它平方整个列表呢?
jgovgodb1#
你可以使用列表解析:
def square(list): return [i ** 2 for i in list]
或者你可以map它:
map
def square(list): return map(lambda x: x ** 2, list)
或者你可以使用一个生成器。它不会返回一个列表,但你仍然可以遍历它,因为你不必分配一个完整的新列表,它可能比其他选项更节省空间:
def square(list): for i in list: yield i ** 2
或者你也可以执行无聊的旧for-loop,尽管这并不像一些Python程序员喜欢的那样惯用:
for
def square(list): ret = [] for i in list: ret.append(i ** 2) return ret
yws3nbqq2#
使用列表解析(这是纯Python的方式):
>>> l = [1, 2, 3, 4] >>> [i**2 for i in l] [1, 4, 9, 16]
或者numpy(一个成熟的模块):
>>> numpy.array([1, 2, 3, 4])**2 array([ 1, 4, 9, 16])
在numpy中,默认情况下,数组的数学运算是按元素执行的。这就是为什么你可以在那里**2整个数组。其他可能的解决方案是基于map的,但在这种情况下,我真的会选择列表解析。它是Pythonic:)和基于map的解决方案,需要lambda s is slower than LC。
numpy
**2
lambda
fd3cxomn3#
import numpy as np a = [2 ,3, 4] np.square(a)
2fjabf4q4#
使用numpy。
import numpy as np b = list(np.array(a)**2)
tct7dpnv5#
def square(a): squares = [] for i in a: squares.append(i**2) return squares
bf1o4zei6#
另一个Map解决方案:
def square(a): return map(pow, a, [2]*len(a))
ux6nzvsh7#
那么我将如何做的平方数从1-20使用上述功能
v440hwme8#
你能做的
square_list =[i**2 for i in start_list]
其返回
[25, 9, 1, 4, 16]
或者,如果列表已经有值
square_list.extend([i**2 for i in start_list])
这将导致一个列表,看起来像:
square_list.append([i**2 for i in start_list])
因为它实际上向原始列表添加了一个列表,例如:
[_original_, _list_, _data_, [25, 9, 1, 4, 16]]
8条答案
按热度按时间jgovgodb1#
你可以使用列表解析:
或者你可以
map
它:或者你可以使用一个生成器。它不会返回一个列表,但你仍然可以遍历它,因为你不必分配一个完整的新列表,它可能比其他选项更节省空间:
或者你也可以执行无聊的旧
for
-loop,尽管这并不像一些Python程序员喜欢的那样惯用:yws3nbqq2#
使用列表解析(这是纯Python的方式):
或者numpy(一个成熟的模块):
在
numpy
中,默认情况下,数组的数学运算是按元素执行的。这就是为什么你可以在那里**2
整个数组。其他可能的解决方案是基于
map
的,但在这种情况下,我真的会选择列表解析。它是Pythonic:)和基于map
的解决方案,需要lambda
s is slower than LC。fd3cxomn3#
2fjabf4q4#
使用numpy。
tct7dpnv5#
bf1o4zei6#
另一个Map解决方案:
ux6nzvsh7#
那么我将如何做的平方数从1-20使用上述功能
v440hwme8#
你能做的
其返回
或者,如果列表已经有值
这将导致一个列表,看起来像:
因为它实际上向原始列表添加了一个列表,例如: