【发布时间】:2017-06-20 23:06:11
【问题描述】:
我想按列表中元素的出现次数对列表进行排序。
当我使用这种形式时:
A=[2,1,3,4,2,2,3]
A.sort(key=lambda x:A.count(x))
print(A)
结果不是我想要的:[2, 1, 3, 4, 2, 2, 3].
但是,当我使用sorted 写这样的文章时:
B=sorted(A,key=lambda x:A.count(x))
print(B)
结果是对的:[1, 4, 3, 3, 2, 2, 2].
这种行为的原因是什么?
【问题讨论】:
-
旁注,您不需要
lambda,例如A.sort(key = A.count) -
这会返回 A 中每个元素的出现次数:
[A.count(element) for element in set(A)] -
在此处使用
Counter(A.sort(key=collections.Counter(A).get)) 会更有效,并且适用于sort和sorted。 -
Python 对象分为可变和不可变两种。如果可变对象中的值发生变化,它会影响原始数据。因为
list object是可变的,所以数据的索引是动态变化的。