为什么在此示例中需要在Python(3)中一次对多个列表进行排序时定义变量变量?

时间:2019-03-11 09:39:37

标签: python-3.x

简单的问题。 我有这些列表:

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才能使此代码起作用吗?

2 个答案:

答案 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]