首页 > 解决方案 > 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)

但我想这不是最好的方法。也许有更好的方法?

标签: python

解决方案


您可以创建一个包含项目顺序的 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]

推荐阅读