我正在寻找一个函数来获取列表中的整数,例如[1,2,3],并返回一个带有平方整数的新列表; [1,4,9]
我该怎么做?
PS - 就在我即将提交之前我注意到O'Reilly的'Learning Python'第14章似乎提供了我正在寻找的解释(第358页,第4版)但我仍然很想知道其他解决方案是否可行
答案 0 :(得分:19)
您可以(并且应该)使用list comprehension:
squared = [x**2 for x in lst]
map
为每个元素调用一个函数,而lambda
表达式非常方便,使用map
+ lambda
的速度大多比列表理解慢。
答案 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)
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