如果list具有相同的项目,则带有list.count的Python排序列表不起作用

时间:2018-10-07 08:02:32

标签: python python-3.x sorting

我一直试图根据在Python3中出现的元素(字符串)对列表进行排序。我一直使用内置sort()方法和string.count作为键,如下所示。

p = "acaabbcabac"
print(sorted(p, key=p.count))
# Output : ['c', 'b', 'b', 'c', 'b', 'c', 'a', 'a', 'a', 'a', 'a']
#But expected output is ['a','a','a','a','a','b','b','b','c','c','c']

p = "acaabbcb"
print(sorted(p, key=p.count))
# Output : ['c', 'c', 'a', 'a', 'a', 'b', 'b', 'b']
#Output is as expected 

p = "ababab"
print(sorted(p, key=p.count))
# Output :['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b'] 
#But expected output is ['a','a','a','b','b','b']

我观察到的是,以上排序根据元素的出现而起作用,但是仅当每个元素的计数不同时才起作用。如果两个或两个以上元素的出现相同,则它们以在字符串/列表中出现的顺序列出。

我做错什么了吗,或者有更好的方法吗?我尝试搜索此问题的答案,但找不到,因此将其发布在此处。

谢谢。

1 个答案:

答案 0 :(得分:0)

在排序键中使用lambda函数,其中第一个操作为p.count,第二个简单地对元素值进行排序(最终按字母顺序排列):

p = "ababab"
sorted(p, key = lambda x: [p.count, x])
# ['a', 'a', 'a', 'b', 'b', 'b']