平移列表中的所有元素

时间:2012-09-23 19:17:31

标签: python arrays return

我被告知

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

起初,我有

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

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

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

但这只是我阵列的最后一个数字。我如何才能使整个列表正确?

11 个答案:

答案 0 :(得分:26)

您可以使用列表理解:

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 - 循环,虽然这不像一些Python程序员所希望的那样惯用:

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

答案 1 :(得分:24)

使用列表推导(这是纯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

答案 2 :(得分:4)

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

答案 3 :(得分:2)

使用numpy。

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

还有一个地图解决方案:

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

答案 6 :(得分:0)

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

那么如何使用上面的函数

来完成1-20的数字平方

答案 7 :(得分:0)

你可以做到

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

因为它返回列表中的列表:

[[25, 9, 1, 4, 16]]

答案 8 :(得分:-1)

const [count] = undefined;

答案 9 :(得分:-2)

from array import *

array('i', [5, 6, 4])
print(*list(map(pow, vals, [2] * len(vals))), sep='\n')

答案 10 :(得分:-2)

.Select(value => match.Body.ReplaceParameter(match.Parameters[1], value))