首页 > 解决方案 > 如何根据其中的数字对字符串列表进行排序?

问题描述

我的问题真的很奇怪。我必须对列表进行排序,例如:

list1=["S01E01","S02E010", "S02E013", "S02E02", "S02E03"]

我想要这样的结果:

list1=["S01E01","S02E02", "S02E03", "S02E010", "S02E013"]

我使用了sort(), sorted(),map()方法,但这些方法无法对这个列表进行排序,因为它已经排序。如果您在 python 控制台中键入 "010">"02" ,它将返回false

请建议我以任何方式调试此问题。

查看控制台截图

标签: pythonpython-3.xlistsortingsortedlist

解决方案


为此,您需要使用一个键函数将字符串拆分为组件并将它们作为元组返回。如果您希望以数字方式考虑其值,则任何作为数字的子字符串都应转换为整数,否则它将按字典顺序(按字母顺序)。

根据样本数据,我认为这样做是这样的:

def keyfunc(s):
    return s[0], int(s[1:3]), s[3], int(s[4:])

list1 = ["S01E01","S02E010", "S02E013", "S02E02", "S02E03"]

result = sorted(list1, key=keyfunc)
print(result)  # -> ['S01E01', 'S02E02', 'S02E03', 'S02E010', 'S02E013']

推荐阅读