我有一个看起来像这样的列表
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)']
答案 0 :(得分:1)
如果我对您的理解正确,
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)']
答案 1 :(得分:-2)
也许我遗漏了一些东西,但是简单有什么问题呢?
>>> lst = ['3.0', '3.0 (key)', '2.0', '2.0 (key)', '1.0', '1.0 (key)', '1.1', '1.1 (key)']
>>> sorted(lst, reverse=True)
['3.0 (key)', '3.0', '2.0 (key)', '2.0', '1.1 (key)', '1.1', '1.0 (key)', '1.0']
编辑:解决OP问题:构建新列表,如果需要,交换最后一个项目,否则保持顺序,不需要成对的值:
list_ = ['3.5 (key)',
'3.0', '3.0 (key)',
'2.5',
'2.0', '2.0 (key)',
'1.5 (key)',
'1.0', '1.0 (key)',
'1.1', '1.1 (key)',
'0.9']
summary = []
for item in list_:
summary.append(item)
if 2 <= len(summary):
if item.split()[0] == summary[-2]:
summary.insert(-1, summary.pop(-1))
# summary
['3.5 (key)',
'3.0 (key)', '3.0',
'2.5',
'2.0 (key)', '2.0',
'1.5 (key)',
'1.0 (key)', '1.0',
'1.1 (key)', '1.1',
'0.9']