首页 > 解决方案 > 对保留相同数字顺序的列表进行反向排序

问题描述

我有一个看起来像这样的列表

lst = ['3.0', '3.0 (key)', '2.0', '2.0 (key)', '1.0', '1.0 (key)', '1.1', '1.1 (key)']

我想对其进行反向排序,使其看起来仍然是相同的数字顺序,但带有文本的项目'(key)'应该排在第一位。

['3.0 (key)', '3.0', '2.0 (key)', '2.0', '1.0 (key)', '1.0', '1.1 (key)', '1.1']

到目前为止我所做的是

lst.sort(reverse=True)

反转整个列表,忽略数字顺序导致:

['1.1', '1.1 (key)', '1.0 (key)', '1.0', '3.0', '3.0 (key)', '2.0 (key)', '2.0']

我想要的是

['1.0', '1.0 (key)', '1.1', '1.1 (key)', '2.0', '2.0 (key)', '3.0', '3.0 (key)']

标签: pythonlistsorting

解决方案


如果我理解正确,

def _first_element(elements):
    return elements[0]
# First you zip the items to groups.
groups = zip(*[iter(self._takes)]*2)
# then sort the groups in reverse
zipped.sort(key=first_element, reverse=True)
then build a new list what 
new_list=[]
for item in zipped:
    new_list.append(item[-1])
    new_list.append(item[0])

> new_list
> ['1.0', '1.0 (key)', '1.1', '1.1 (key)', '2.0', '2.0 (key)', '3.0', '3.0 (key)']

推荐阅读