平移列表中的所有元素

use*_*517 12 python arrays return

我被告知要

写一个函数square(a),它接受一个数组a,数字并返回一个包含每个平方值的数组.

起初,我有

def square(a):
    for i in a: print i**2
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为我正在打印,而不是像我被问到的那样回来.所以我试过了

    def square(a):
        for i in a: return i**2
Run Code Online (Sandbox Code Playgroud)

但这只是我阵列的最后一个数字.我怎样才能让它在整个列表中找到方位?

Wal*_*han 32

你可以使用列表理解:

def square(list):
    return [i ** 2 for i in list]
Run Code Online (Sandbox Code Playgroud)

或者你可以map:

def square(list):
    return map(lambda x: x ** 2, list)
Run Code Online (Sandbox Code Playgroud)

或者你可以使用发电机.它不会返回列表,但您仍然可以遍历它,并且由于您不必分配整个新列表,因此它可能比其他选项更节省空间:

def square(list):
    for i in list:
        yield i ** 2
Run Code Online (Sandbox Code Playgroud)

或者你可以做一些无聊的旧for循环,虽然这不像一些Python程序员所希望的那样惯用:

def square(list):
    ret = []
    for i in list:
        ret.append(i ** 2)
    return ret
Run Code Online (Sandbox Code Playgroud)


Jan*_*cke 26

使用列表理解(这是纯Python的方式):

>>> l = [1, 2, 3, 4]
>>> [i**2 for i in l]
[1, 4, 9, 16]
Run Code Online (Sandbox Code Playgroud)

numpy(一个完善的模块):

>>> numpy.array([1, 2, 3, 4])**2
array([ 1,  4,  9, 16])
Run Code Online (Sandbox Code Playgroud)

numpy,默认情况下,数组上的数学运算是按元素执行的.这就是为什么你可以**2在那里整个阵列.

其他可能的解决方案将是map基于的,但在这种情况下,我真的会去列表理解.它是Pythonic :)和map基于a 的解决方案,需要lambdas 比LC慢.


use*_*711 8

import numpy as np
a = [2 ,3, 4]
np.square(a)
Run Code Online (Sandbox Code Playgroud)