简单的问题。 我有这些列表:
alpha = [5,10,1,2]
beta = [1,5,2]
gamma = [5,2,87,100,1]
我想我可以用以下方法对它们进行排序:
map(lambda x: list.sort(x),[alpha,beta,gamma])
这不起作用。 起作用的是:
a,b,c = map(lambda x: list.sort(x),[alpha,beta,gamma])
有人可以解释为什么我需要定义a,b和c才能使此代码起作用吗?
答案 0 :(得分:2)
因为map()
是 lazy (自Python 3起)。它返回一个类似于生成器的对象,仅在要求其内容时才对其进行评估,例如,因为您要将其各个元素分配给变量。
例如,这也迫使它进行评估:
>>> list(map(lambda x: list.sort(x),[alpha,beta,gamma]))
但是使用map有点陈旧,列表理解和生成器理解存在并且几乎总是习惯用法。另外,list.sort(x)
是一种写x.sort()
的奇怪方法,它可能会起作用,也可能无法起作用,请避免。
[x.sort() for x in [alpha, beta, gamma]]
按预期工作。
但是,如果您对结果不感兴趣,则建立列表并不重要。您真正想要的是一个简单的 for循环:
for x in [alpha, beta, gamma]:
x.sort()
这完全是Python风格的,除了在这种固定的简单情况下,我可能更喜欢这一点:
alpha.sort()
beta.sort()
gamma.sort()
没有比这更明确的了。
答案 1 :(得分:0)
这是因为list.sort()
返回None
。它可以对列表进行排序
如果要对它们进行排序并返回列表,请执行以下操作:
a,b,c =(对于[alpha,beta,γ]中的l进行排序(l))
In [10]: alpha.sort()
In [11]: sorted(alpha)
Out[11]: [1, 2, 5, 10]