python 将列表中的所有元素平方

7bsow1i6  于 2023-04-04  发布在  Python
关注(0)|答案(8)|浏览(204)

我被告知
写一个函数square(a),它接受一个数字数组a,并返回一个包含每个平方值的数组。
一开始我有

def square(a):
    for i in a: print i**2

但是这不起作用,因为我正在打印,而且不像我被要求的那样返回。所以我试了试

def square(a):
        for i in a: return i**2

但是这只平方了我的数组的最后一个数字。我怎么能让它平方整个列表呢?

jgovgodb

jgovgodb1#

你可以使用列表解析:

def square(list):
    return [i ** 2 for i in list]

或者你可以map它:

def square(list):
    return map(lambda x: x ** 2, list)

或者你可以使用一个生成器。它不会返回一个列表,但你仍然可以遍历它,因为你不必分配一个完整的新列表,它可能比其他选项更节省空间:

def square(list):
    for i in list:
        yield i ** 2

或者你也可以执行无聊的旧for-loop,尽管这并不像一些Python程序员喜欢的那样惯用:

def square(list):
    ret = []
    for i in list:
        ret.append(i ** 2)
    return ret
yws3nbqq

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

fd3cxomn

fd3cxomn3#

import numpy as np
a = [2 ,3, 4]
np.square(a)
2fjabf4q

2fjabf4q4#

使用numpy。

import numpy as np
b = list(np.array(a)**2)
tct7dpnv

tct7dpnv5#

def square(a):
    squares = []
    for i in a:
        squares.append(i**2)
    return squares
bf1o4zei

bf1o4zei6#

另一个Map解决方案:

def square(a):
    return map(pow, a, [2]*len(a))
ux6nzvsh

ux6nzvsh7#

def square(a):
    squares = []
    for i in a:
        squares.append(i**2)
    return squares

那么我将如何做的平方数从1-20使用上述功能

v440hwme

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])

这将导致一个列表,看起来像:

[25, 9, 1, 4, 16]
  • 注意 *:你不想做
square_list.append([i**2 for i in start_list])

因为它实际上向原始列表添加了一个列表,例如:

[_original_, _list_, _data_, [25, 9, 1, 4, 16]]

相关问题