首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中按特定顺序对包含字母和数字的字符串进行排序

如何在python中按特定顺序对包含字母和数字的字符串进行排序
EN

Stack Overflow用户
提问于 2019-06-04 02:46:50
回答 2查看 89关注 0票数 0

我有一个要按特定顺序排序的列表。我尝试了stackoverflow中的各种方法,但它们都没有得到我需要的答案。任何帮助都将不胜感激

代码语言:javascript
复制
order_list = ['ABC123'] #this is the list that should define the order, according to the first character
lst = ['AA2', 'A3', 'A1', 'AA1', 'BBB2', 'A2', 'AA3', 'BBB1', 'AAA', 'BBB3']
print(sort_method(lst))

>>>['AAA', 'AA1', 'AA2', 'AA3', 'A1', 'A2', 'A3', 'BBB1', 'BBB2', 'BBB3','CCC1','CCC2']

#different orderlist
order_list = ['CBA123']
lst = ['BBB3', 'AA2', 'A2', 'BBB2', 'CCC2', 'AA3', 'CCC1', 'AAA', 'AA1', 'A3', 'BBB1', 'A1']
print(sort_method(lst))

>>>['CCC1','CCC2','BBB1', 'BBB2', 'BBB3','AAA', 'AA1', 'AA2', 'AA3', 'A1', 'A2', 'A3']
EN

回答 2

Stack Overflow用户

发布于 2019-06-04 02:52:42

这里没有必要定义你自己的函数。stdlib函数sorted接受一个命名参数key,该参数可用于指定排序顺序。试试这个:

代码语言:javascript
复制
print( sorted( lst, key=lambda x:[order_list[0].index(y) for y in x] ))

key函数将根据字符在order_list中的位置,为要排序的字符串中的每个字符获取索引列表。

如果lst中存在order_list中不存在的任何字符,这将导致抛出异常。

票数 6
EN

Stack Overflow用户

发布于 2019-06-04 03:00:58

您还可以使用dict来保持排序顺序:

代码语言:javascript
复制
someorder = {letter: val for val, letter in enumerate(order_list[0])}

# then use get on the dictionary for fast lookup
print(sorted(lst, key = lambda x: [someorder.get(letter) for letter in x]))

# ['AAA', 'AA1', 'AA2', 'AA3', 'A1', 'A2', 'A3', 'BBB1', 'BBB2', 'BBB3']

其中get还允许您为任何找不到的字符设置默认值:

代码语言:javascript
复制
default_value = max(someorder.values())+1
print(sorted(['A', 'BBB', 'X'], key = lambda x: [someorder.get(letter, default_value) for letter in x]))

# ['A', 'BBB', 'X']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56432950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档