首页 > 解决方案 > 如何按出现顺序对列表进行排序并将相同的元素聚集在一起?

问题描述

我的问题的一些要点如下,感谢您的帮助:如果有多个相同的元素,它们应该以与迭代中第一次出现的顺序相同的顺序结束。
如果元素仅在列表中出现一次,则该函数应返回原始列表。

assert list(appearance_sort([3, 5, 4, 3, 6, 4])) == [3, 3, 5, 4, 4, 6]
assert list(appearance_sort(['apple', 'apple', 'banana', 'grape', 'banana'])) == ['apple', 'apple', 'banana', 'banana', 'grape']
assert list(appearance_sort([13, 28, 69, 72])) == [13, 28, 69, 72]
assert list(appearance_sort([])) == []
assert list(appearance_sort([1])) == [1]

标签: python-3.x

解决方案


您可以使用自定义key功能sorted

def appearance_sort(x):
    return sorted(x, key=lambda y: x.index(y))

var = [1,5,67,1,5,2,1,67,26]
print(var)
print(appearance_sort(var))

输出:

[1, 5, 67, 1, 5, 2, 1, 67, 26]
[1, 1, 1, 5, 5, 67, 67, 2, 26]

这样做的原因是因为list.index返回该变量的第一个实例的索引。


推荐阅读