当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何按用户定义的顺序对列表中的列表进行排序?》经验,为你挑选了2个好方法。

我想按列表中的优先顺序(*,/,+, - )对数学运算符列表(存储为字符串)进行排序.我的列表中有数千个列表.

例如

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

应成为:

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

有没有办法按用户定义的顺序对列表中的列表进行排序?



1> ZdaR..:

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

你可以简单地通过传递key给sort函数来做到:

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

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

但是你在问题中提到了一个元组(*,/,+,-),所以我尝试使用列表来解决问题,但是使用字典会更加清晰,因为@thefourtheye建议.



2> thefourtheye..:

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

>>> priority = {'*': 0, '/': 1, '+': 2, '-': 3}

然后使用来自的值对单个列表进行排序priority,如下所示

>>> [sorted(item, key=priority.get) for item in my_lists]
[['*', '+', '-'], ['*', '*', '-'], ['/', '+', '-']]

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有