使用list.count使用.sort()就地对列表进行排序不起作用。为什么?

【字号: 日期:2024-03-08浏览:32作者:雯心
如何解决使用list.count使用.sort()就地对列表进行排序不起作用。为什么??

您看到的是的某些 的结果list.sort。再试一次,但是先创建一个副本a:

a.sort(key=a.copy().count)a# [1, 5, 5, 2, 2, 4, 4, 4]

这被记录为实现细节。

什么copy电话确实是它创建的副本a用途和 该 列表的count的关键方法。您可以看到一些调试语句会发生什么:

def count(x): print(a) return a.count(x)a.sort(key=count)[][][]...

a在内部访问时会显示为空列表.sort,并且[].count(anything)将是0。这解释了为什么输出与输入相同-谓词都相同(0)。

OTOH,sorted创建一个新列表,因此它没有此问题。

如果您真的想按频率计数排序,惯用的方法是使用Counter:

from collections import Countera.sort(key=Counter(a).get)a# [1, 5, 5, 2, 2, 4, 4, 4]解决方法

我试图按其元素的频率对列表进行排序。

>>> a = [5,5,4,1,2,2]>>> a.sort(key = a.count)>>> a[5,2]

a不变。然而:

>>> sorted(a,key = a.count)[1,4]

为什么这种方法不起作用.sort()?

相关文章: