如何对包含字母与数字的列表进行自然排序?
按剧集编号正确排序列表的方法
你遇到的问题是默认字符串排序会把EP10排在EP2前面,这是因为字符串排序是逐个字符比较,1的ASCII码比2小。要实现按EP后的数字从小到大排序,只需自定义排序规则即可。
原列表
original_list = ['american dad S1-EP1', 'american dad S1-EP10', 'american dad S1-EP11', 'american dad S1-EP12', 'american dad S1-EP13', 'american dad S1-EP14', 'american dad S1-EP15', 'american dad S1-EP16', 'american dad S1-EP17', 'american dad S1-EP18', 'american dad S1-EP19', 'american dad S1-EP2', 'american dad S1-EP20', 'american dad S1-EP21', 'american dad S1-EP22', 'american dad S1-EP23', 'american dad S1-EP3', 'american dad S1-EP4', 'american dad S1-EP5', 'american dad S1-EP6', 'american dad S1-EP7', 'american dad S1-EP8', 'american dad S1-EP9']
方法一:分割字符串提取编号
通过split('-EP')分割字符串,提取出EP后的数字并转为整数,以此作为排序依据:
sorted_list = sorted(original_list, key=lambda x: int(x.split('-EP')[1])) # 输出排序后的列表 for item in sorted_list: print(item)
方法二:正则表达式提取编号
如果字符串格式有变动,用正则表达式提取EP后的数字更通用:
import re sorted_list = sorted(original_list, key=lambda x: int(re.search(r'EP(\d+)', x).group(1))) # 输出排序后的列表 for item in sorted_list: print(item)
两种方法都能得到你想要的顺序:EP1、EP2、EP3……EP23。
内容的提问来源于stack exchange,提问作者pigerfier
相关产品推荐
相关产品推荐

