使用约束排序

时间:2017-03-12 21:44:30

标签: python

我有一个清单:

l = ['dylan', 'andy', 'alan', 'bob', 'but this must go last']

是否有任何pythonic方法按字母顺序对项目进行某些约束排序?我想要一个特定的项目作为最后一项,因此排序后的结果不是:

l.sort()
['alan', 'andy', 'bob', 'but this must go last', 'dylan']

而是:

['alan', 'andy', 'bob', 'dylan', 'but this must go last']

我想到的解决方案是从列表中删除特定项目,对其进行排序,然后将其放在最后。有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

不要过度思考。从列表中删除应该是最后的项目,对列表进行排序并将删除的项目添加到列表的末尾。

答案 1 :(得分:1)

所以,只需在排序时删除最后一个元素,然后将其放在最后:

i < N

或者,更一般地说,如果要排除第i个元素:

 sorted(l[:-1]) + [l[-1]]

答案 2 :(得分:0)

如果您正在寻找更通用的解决方案,我认为您必须实现自己的自定义列表类并覆盖比较方法,就像它们在http://pythoncentral.io/how-to-sort-a-list-tuple-or-object-with-sorted-in-python/上所做的那样

另一种不同的方法是创建一个没有要结束的元素的列表,对新列表进行排序并附加翻录元素。

类似的东西:

new_list = sorted([item for item in l if item != 'but this must go last'])
new_list.append('but this must go last')