【问题标题】:Python not standart list sorting [duplicate]Python不是标准列表排序[重复]
【发布时间】:2019-05-06 09:37:43
【问题描述】:

假设我有一个这样的列表:[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)

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

【问题讨论】:

  • 排序背后的逻辑是什么?
  • 这是您唯一的用途吗?即永远不会有(比如说)4 进行排序,并且每个数字总是有 2 个元素?
  • 您希望按照什么标准进行排序以产生该输出?
  • 如果它只包含123,这可以使用“基数排序”的变体在线性时间内完成。
  • 我不确定这是否可以称为排序:-)

标签: python


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2019-11-29
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2011-10-31
    相关资源
    最近更新 更多