列表的自定义排序顺序


问题内容

我有以下列表:

mylist1 = ['alpha', 'green']
mylist2 = ['blue', 'alpha', 'red']

我想通过此自定义排序列表对这两个列表进行排序: ['red','blue','green','alpha']

mylist1 = ['green', 'alpha']mylist2 = ['red','blue','alpha']

如何在Python中执行此操作?


问题答案:

示范

>>> mylist1 = ['alpha', 'green']
>>> mylist2 = ['blue', 'alpha', 'red']
>>> sort_order = ['red', 'blue', 'green', 'alpha']
>>> mylist1.sort(key=sort_order.index)
>>> mylist1
['green', 'alpha']
>>> mylist2.sort(key=sort_order.index)
>>> mylist2
['red', 'blue', 'alpha']

说明

中的key参数list.sort使列表通过比较key(element)而不是来确定顺序element。例如,要进行不区分大小写的排序,可以传递key使字符串小写的函数。比较了小写元素,但保留了原始元素:

>>> x = ["age", "Bonkers", "cheese"]
>>> x.sort()
>>> x
['Bonkers', 'age', 'cheese']
>>> str.lower("Bonkers")
'bonkers'    
>>> x.sort(key=str.lower)
>>> x
['age', 'Bonkers', 'cheese']

使用sort_order.index该键使用该元件在索引sort_order列表来确定顺序的元素本身而不是。因此'red'使用0'blue'使用1等…的结果是,要排序的列表根据每个元素所在的位置进行排序sort_order