Python 对保留相同数字顺序的列表进行反向排序
我有一张这样的清单Python 对保留相同数字顺序的列表进行反向排序,python,list,sorting,Python,List,Sorting,我有一张这样的清单 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.sor
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)']
也许我遗漏了什么,但简单有什么错:
>>> 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']
list_=['3.5(键)',
“3.0”、“3.0(关键)”,
'2.5',
“2.0”、“2.0(关键)”,
"1.5(关键)",,
“1.0”、“1.0(关键)”,
“1.1”、“1.1(关键)”,
'0.9']
摘要=[]
对于列表中的项目:
摘要.追加(项目)
如果我理解正确
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)']
你想用奇数索引交换偶数索引,还是这只是一个坏例子?我已经修复了它,我想要的是['3.0(键)'、'3.0'、'2.0'、'1.0(键)'、'1.0'、'1.1(键)']
抱歉地说,但出于所有目的(数字)1.1应该介于2.0和1.0之间-为什么要对所有数字进行递减排序,而将较大的1.1排序到较低的1.0之后(不管它是否有(键)?它应该如何表现?将['2.3(键),'2.3']
添加到您的数据中?请回答我上面的问题。输入是否类似['3.0',1.0(键)“,”1.0“,”3.0(键)“
?如果是这样,期望的结果是什么?(上次编辑数字顺序后,结果是:['1.1','1.1(键)','1.0(键)','1.0','3.0','3.0(键)','2.0']
不是命令lst.sort(reverse=True)
将输出的。打字错误?)这不是OP想要的。好吧,我怀疑我错过了什么。@baduker:现在应该是OP想要的东西了。