如何根据列表的外观顺序对其进行排序,并将相同的元素聚集在一起



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

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]

您可以为函数sorted:使用自定义key

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返回该变量的第一个实例的索引。

最新更新