python-3.x - 如何按出现顺序对列表进行排序并将相同的元素聚集在一起?
问题描述
我的问题的一些要点如下,感谢您的帮助:如果有多个相同的元素,它们应该以与迭代中第一次出现的顺序相同的顺序结束。
如果元素仅在列表中出现一次,则该函数应返回原始列表。
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]
解决方案
您可以使用自定义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
返回该变量的第一个实例的索引。
推荐阅读
- android - 如何编写索引?
- c++ - CMake 声明函数对 ExternalProject_Add 的依赖
- sql - postgres SQL查询中如何实现数学表达式?
- kubernetes - Openshift:pod 之间的可见性
- javascript - 通过单击另一个 div 使 div 消失并出现
- tsql - 如何获取从今天开始的前 52 周
- python - Python socket irc bot - socket.gaierror: [Errno 11001] getaddrinfo failed
- ios - Unity iOS 生成的项目无法加载框架:dylib,找不到图像的原因
- angular - XSLXWriter 和 Angular 5,无法更改 Excel 文件中的标题样式
- excel - Excel VBA:多个工作表导出到多个excel文件