我一直试图根据在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']
我观察到的是,以上排序根据元素的出现而起作用,但是仅当每个元素的计数不同时才起作用。如果两个或两个以上元素的出现相同,则它们以在字符串/列表中出现的顺序列出。
我做错什么了吗,或者有更好的方法吗?我尝试搜索此问题的答案,但找不到,因此将其发布在此处。
谢谢。
答案 0 :(得分:0)
在排序键中使用lambda
函数,其中第一个操作为p.count
,第二个简单地对元素值进行排序(最终按字母顺序排列):
p = "ababab"
sorted(p, key = lambda x: [p.count, x])
# ['a', 'a', 'a', 'b', 'b', 'b']