Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python返回平方整数列表_Python_List - Fatal编程技术网

使用python返回平方整数列表

使用python返回平方整数列表,python,list,Python,List,我想写一个函数,它接受一个列表中的整数,比如[1,2,3],然后返回一个带有平方整数的新列表;[1,4,9] 我该怎么办 PS-就在我准备提交之前,我注意到O'Reilly的《学习Python》第14章似乎提供了我想要的解释(第358页,第4版) 但我仍然很想知道还有哪些解决方案是可行的您可以(也应该)使用: squared = lambda li: map(lambda x: x*x, li) map对每个元素进行一次函数调用,虽然lambda表达式非常方便,但使用map+lambda通常比

我想写一个函数,它接受一个列表中的整数,比如[1,2,3],然后返回一个带有平方整数的新列表;[1,4,9]

我该怎么办

PS-就在我准备提交之前,我注意到O'Reilly的《学习Python》第14章似乎提供了我想要的解释(第358页,第4版)

但我仍然很想知道还有哪些解决方案是可行的

您可以(也应该)使用:

squared = lambda li: map(lambda x: x*x, li)
map
对每个元素进行一次函数调用,虽然
lambda
表达式非常方便,但使用
map
+
lambda
通常比列表理解慢


值得一读。

您应该了解内置的
map
,它将函数作为第一个参数,将iterable作为第二个参数,并返回由函数作用的项组成的列表。 例如

有一种更好的方法来编写上面的sqr函数,即使用语法古怪的无名
lambda
。(初学者在寻找返回stmt时会感到困惑)

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

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

除了lambda和list理解之外,还可以使用生成器。列表理解在调用时计算所有的方块,生成器在遍历列表时计算每个方块。当输入大小较大或仅使用结果的某些初始部分时,生成器会更好

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

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

kefeizhou的评论很好,但是不需要生成函数,生成表达式是正确的:

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

您可以将
lambda
map
一起使用来获取此信息

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

更多的“pythonic”可能是:
lambda lst:[x*x代表lst中的x]
@phihag为什么要引入lambda而
[x*x代表xli]
很合适?@eyquem可能是因为问题是“我想写一个函数…”@phihag那么,
def squarification(li)出了什么问题:返回[x*x代表xli中的x]
?@eyquem有些人对函数式编程有着奇怪的严格概念,就像许多人对OOP有着奇怪的概念一样(尽管通常不是因为严格)重要的是要提到imo(因为它在开始时可能会让人困惑),您只能迭代一个生成器一次。为了完整性:您可以简单地使用
元组(generate_squares(original))
列表(generate_squares(original))
强制对生成器求值(即获得实际结果)。
result = [x*x for x in range(1,10)]
def generate_squares(a):
    for x in a:
        yield x**2 

# this is equivalent to above
b = (x**2 for x in a)
for sq in (x*x for x in li):
   # do
lst=(3,8,6)
sqrs=map(lambda x:x**2,lst)
print sqrs