python - Python不是标准列表排序
问题描述
假设我有一个这样的列表:[2, 3, 3, 2, 1, 1]
并且我想对其进行排序以获得 [1, 1, 3, 3, 2, 2]
. 我怎样才能以良好的pythonic方式做到这一点?我试过这样:
import random
alist = [1, 1, 2, 2, 3, 3]
random.shuffle(alist)
print(alist)
ones = []
twos = []
threes = []
for item in alist:
if item == 1:
ones.append(item)
elif item == 2:
twos.append(item)
else:
threes.append(item)
ordered_list = []
ordered_list.extend(ones)
ordered_list.extend(threes)
ordered_list.extend(twos)
print(ordered_list)
但我想这不是最好的方法。也许有更好的方法?
解决方案
您可以创建一个包含项目顺序的 dict,然后提供对其的查找作为常规sort()
方法的关键参数。
orderlist = [1, 3, 2]
order = {item: prio for prio, item in enumerate(orderlist)}
# order = {1:0, 3:1, 2:2}
alist = [1, 2, 3, 3, 2, 1]
alist.sort(key=lambda i: order[i])
alist
输出
[1, 1, 3, 3, 2, 2]
推荐阅读
- reactjs - 当我不想重新创建组件时做出反应
- vpn - DrayTek SSL VPN 看不到 SIP 服务器
- python - Matplotlib 上的未知属性刻度错误
- mongodb - Bson 没有声明在 @BsonProperty 中声明的字段的正确名称
- java - 为什么这个程序不打印?
- reactjs - Axios 从 React 应用程序中获取本地服务器 url 的请求
- javascript - 使用 javascript 的椭圆库验证从 golang ecdsa 库生成的签名
- java - 双向链表:在前面添加一个节点。来自 geeksforgeeks(java 代码)
- python - 如何在 Django 中正确使用带有嵌套序列化程序的 POST?
- hhvm - 如何在 Windows 7 上正确安装 Hack 和 HHVM