使用两个标准对Python列表排序

2024-09-30 19:29:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用两个标准对列表进行排序:

index_sort = {'r1':1, 'r2':2, 'T1':3, 'r3':4, 'T2':5, 'T3':6}

Eall_pairsorted = sorted(Eall_pairsorted, key = lambda e: (index_sort[e[0]], index_sort2[e[1]]  ))

问题是我得到了:

['r1', 'r2', '++', '0.01 0.01', -56.19568267]
['r1', 'T1', '++', '0.01 0.017453292519943295', -56.19567285]
['r1', 'r3', '++', '0.01 0.01', -56.19568267]
['r1', 'T2', '++', '0.01 0.017453292519943295', -56.19567285]
['r1', 'T3', '++', '0.01 0.017453292519943295', -56.19568714]
['r2', 'T1', '++', '0.01 0.017453292519943295', -56.19567439]
['r2', 'r3', '++', '0.01 0.01', -56.19568267]
['r2', 'T2', '++', '0.01 0.017453292519943295', -56.1956784]
['r2', 'T3', '++', '0.01 0.017453292519943295', -56.19568357]
['T1', 'T2', '++', '0.017453292519943295 0.017453292519943295', -56.19566509]
['T1', 'T3', '++', '0.017453292519943295 0.017453292519943295', -56.19570279]
['r3', 'T1', '++', '0.01 0.017453292519943295', -56.1956784]
['r3', 'T2', '+-', '0.01 0.017453292519943295', -56.19567944]
['r3', 'T3', '++', '0.01 0.017453292519943295', -56.19568357]
['r3', 'T3', '--', '0.01 0.017453292519943295', -56.19568081]
['r3', 'T3', '+-', '0.01 0.017453292519943295', -56.19569063]
['r3', 'T3', '-+', '0.01 0.017453292519943295', -56.1956905]
['T2', 'T3', '++', '0.017453292519943295 0.017453292519943295', -56.19570279]
['T2', 'T3', '--', '0.017453292519943295 0.017453292519943295', -56.19570039]
['T2', 'T3', '+-', '0.017453292519943295 0.017453292519943295', -56.195661]
['T2', 'T3', '-+', '0.017453292519943295 0.017453292519943295', -56.19566132]

我想在一行中切换r3和T1:

   ['r3', 'T1', '++', '0.01 0.017453292519943295', -56.1956784]

要获得以下顺序:

['T1', 'r3', '++', '0.01 0.017453292519943295', -56.1956784]

我只想交换“T1”和“r3”,而不是整个列。你知道吗

有什么窍门吗?你知道吗


Tags: key列表标准index排序sortt1t3
2条回答

不能在排序的同时执行,但可以在排序之后执行以下操作:

Eall_pairsorted = sorted(Eall_pairsorted, key = lambda e: (e[0], e[1]))
Eall_pairsorted = [[e[1], e[0]] + e[2:] for e in Eall_pairsorted]

测试:

>>> Eall_pairsorted = [
...     ['r1', 'r2', '++', '0.01 0.01', -56.19568267],
...     ['r1', 'T1', '++', '0.01 0.017453292519943295', -56.19567285],
...     ['r1', 'r3', '++', '0.01 0.01', -56.19568267]
... ]
>>> Eall_pairsorted = [[e[1], e[0]] + e[2:] for e in Eall_pairsorted]
>>> Eall_pairsorted
[
    ['r2', 'r1', '++', '0.01 0.01', -56.19568267], 
    ['T1', 'r1', '++', '0.01 0.017453292519943295', -56.19567285], 
    ['r3', 'r1', '++', '0.01 0.01', -56.19568267]
]

在这种情况下,是否只想重新排列列表中的前两个元素?或者你想在这里应用哪条一般规则?我认为你应该澄清你的问题。如果只有一个具体的案例困扰着你,下面的方法就行了。你知道吗

列表理解:

lst = [
    ['r1', 'r2', '++', '0.01 0.01', -56.19568267],
    ['r3', 'T1', '++', '0.01 0.017453292519943295', -56.19567285],
    ['r1', 'r3', '++', '0.01 0.01', -56.19568267]]

lst = [['T1', 'r3'] + x[2:] if x[0:2] == ['r3', 'T1'] else x for x in lst]

没有列表理解:

Eall_pairsorted = [
    ['r1', 'r2', '++', '0.01 0.01', -56.19568267],
    ['r3', 'T1', '++', '0.01 0.017453292519943295', -56.19567285],
    ['r1', 'r3', '++', '0.01 0.01', -56.19568267]]

for index, item in enumerate(Eall_pairsorted):
    if item[0:2] == ['r3', 'T1']:
        Eall_pairsorted[index][0:2] = ['T1', 'r3']

相关问题 更多 >