使用python返回平方的整数列表

时间:2011-02-22 14:00:51

标签: python list

我正在寻找一个函数来获取列表中的整数,例如[1,2,3],并返回一个带有平方整数的新列表; [1,4,9]

我该怎么做?

PS - 就在我即将提交之前我注意到O'Reilly的'Learning Python'第14章似乎提供了我正在寻找的解释(第358页,第4版)

但我仍然很想知道其他解决方案是否可行

7 个答案:

答案 0 :(得分:19)

您可以(并且应该)使用list comprehension

squared = [x**2 for x in lst]

map为每个元素调用一个函数,而lambda表达式非常方便,使用map + lambda的速度大多比列表理解慢。

Python Patterns - An Optimization Anecdote值得一读。

答案 1 :(得分:9)

除了lambda和list comprehensions之外,您还可以使用生成器。 List comprehension在调用时计算所有正方形,生成器在迭代列表时计算每个正方形。当输入大小很大或者只使用结果的某些初始部分时,生成器会更好。

def generate_squares(a):
    for x in a:
        yield x**2 

# this is equivalent to above
b = (x**2 for x in a)

答案 2 :(得分:6)

squared = lambda li: map(lambda x: x*x, li)

答案 3 :(得分:2)

你应该知道map内置函数,它将函数作为第一个参数,迭代作为第二个参数,并返回一个由函数作用的项组成的列表。 例如,

>>> def sqr(x):
...     return x*x
... 
>>> map(sqr,range(1,10))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> 

有一种更好的方法可以编写上面的sqr函数,即使用具有古怪语法的无名lambda。 (初学者会因为寻找回报而感到困惑)

>>> map(lambda x: x*x,range(1,10))
[1, 4, 9, 16, 25, 36, 49, 64, 81]

除此之外,你也可以使用列表理解。

result = [x*x for x in range(1,10)]

答案 4 :(得分:1)

a = [1, 2, 3]
b = [x ** 2 for x in a]

答案 5 :(得分:0)

kefeizhou的好评,但是不需要生成器函数,生成器表达是对的:

for sq in (x*x for x in li):
   # do

答案 6 :(得分:0)

您可以lambda使用map来获取此信息。

lst=(3,8,6)
sqrs=map(lambda x:x**2,lst)
print sqrs