Python 如何按用户定义的顺序对列表中的列表进行排序?

Python 如何按用户定义的顺序对列表中的列表进行排序?,python,list,python-2.7,sorting,Python,List,Python 2.7,Sorting,我想在列表中按优先级(*、/、+、-)对数学运算符列表(存储为字符串)进行排序。在我的列表中有成千上万的列表 例如 应成为: new_list = [['*','+','-'],['*','*','-'],['/','+','-']] 有没有一种方法可以按照用户定义的顺序对我的列表中的列表进行排序?方法是创建一个新的运算符列表,并将运算符存储在所需的优先级中(您可以随时更改优先级),然后使用运算符索引作为排序键 只需将键传递给排序函数即可: my_lists = [['*','+','-'],

我想在列表中按优先级(*、/、+、-)对数学运算符列表(存储为字符串)进行排序。在我的列表中有成千上万的列表

例如

应成为:

new_list = [['*','+','-'],['*','*','-'],['/','+','-']]

有没有一种方法可以按照用户定义的顺序对我的列表中的列表进行排序?

方法是创建一个新的运算符列表,并将运算符存储在所需的优先级中(您可以随时更改优先级),然后使用运算符索引作为排序键

只需将
传递给排序函数即可:

my_lists = [['*','+','-'],['-','*','*'],['+','/','-']]
operators = ['*', '/', '+', '-']

new_list = [sorted(i, key = operators.index) for i in my_lists]
>>> [['*', '+', '-'], ['*', '*', '-'], ['/', '+', '-']]

然而,您在问题中提到元组是
(*,/,+,-)
,因此我尝试使用list解决这个问题,但使用字典将是@thefourtheye建议的更干净的方法。

您必须使用
.sort()
方法的可选
参数

如果要就地执行此操作,请执行以下操作:

for sublist in my_lists:
    sublist.sort(key="*/+-".index)
或者,如果要创建新列表:

new_list = [sorted(sublist, key="*/+-".index) for sublist in my_lists]
请注意,如果您有许多列表,则使用字典可能更有效:

d = {"*": 0, "/": 1, "+": 2, "-": 3}
key = d.get

您可以使用字典定义优先级,如下所示

>>> priority = {'*': 0, '/': 1, '+': 2, '-': 3}
>>> [sorted(item, key=priority.get) for item in my_lists]
[['*', '+', '-'], ['*', '*', '-'], ['/', '+', '-']]
然后使用
优先级中的值对各个列表进行排序,如下所示

>>> priority = {'*': 0, '/': 1, '+': 2, '-': 3}
>>> [sorted(item, key=priority.get) for item in my_lists]
[['*', '+', '-'], ['*', '*', '-'], ['/', '+', '-']]

实现一个比较器,您可以稍后将其传递给排序方法。您不需要使用lambda函数:
key=operators。index
将起作用。;)这里的列表很小。所以这没什么大不了的,但是如果
操作符
稍微长一点,
操作符.索引
会占用很多时间。就操作符而言,我猜不会有数百个:P,但无论如何,我承认你的方法更好。