python自定义排序列表1/2/3/./9/10

python自定义排序列表1/2/3/./9/10,python,list,sorting,Python,List,Sorting,我有一个文件名如下的python列表:[name1,name10,name11,name2,name3,…,name9] 我希望它能像[name1,name2,name3,…,name10,name11]那样排序 我该怎么做 我知道我可以使用一个特殊的键函数(sorted(files,key=lambda name:etc.)),但我不确定应用哪个函数 谢谢你的帮助 您搜索的是(有时也称为自然排序)。我链接的站点有多种语言的实现,甚至有一种语言 输出:['name1'、'name2'、'name

我有一个文件名如下的python列表:
[name1,name10,name11,name2,name3,…,name9]

我希望它能像
[name1,name2,name3,…,name10,name11]那样排序

我该怎么做

我知道我可以使用一个特殊的键函数(
sorted(files,key=lambda name:etc.)
),但我不确定应用哪个函数

谢谢你的帮助

您搜索的是(有时也称为自然排序)。我链接的站点有多种语言的实现,甚至有一种语言


输出:
['name1'、'name2'、'name10'、'name11'、'name11'、'name11']

如果您正在寻找一个lambda表达式来与
排序
函数一起使用,并且知道您的条目的格式为“nameXXXXX”:

我想我明白了。 给定一个列表
[name1,name10,name11,name2,name3,…,name9]

sorted(list, key = lambda name: int(name[4:]))

它会将
4
字符剥离,因为
name
的长度为
4
个字符,然后按剩余的数字进行排序。

尝试使用第三方库进行自然字符串排序调用
natsort

>>> import natsort
>>> my_list = [...]
>>> natsort.natsorted(my_list)
还可以使用
key
参数指定排序键

>>> natsort.natsorted(my_list, key=lambda x: ...)
试试这个:

sorted(aList, key= lambda x: (lambda a, _, b: (a, int(b)) if b.isdigit() else (float("inf"), x))(*x.partition(" ")))

这将根据您的要求工作。此外,它不需要任何第三方库。

这是执行此任务的代码示例。它不是最优的,但很容易理解,并让您深入了解这个特定排序问题解决方案背后的逻辑

mylist = ['name1', 'name2', 'name3', 'name10', 'name11']
sorted_list = []

for n in range(100): #this gives you the order
    for item in mylist:
        if int(item[4:]) == n:
            sorted_list.append(item)

print(sorted_list)
它将输出:

['name1', 'name2', 'name3', 'name10', 'name11']

重复:“Python是否有用于字符串自然排序的内置函数?”名称中有不一致的空格,对吗?对不起,我的错。现在更新了,很好!好吧,如果你确切知道你要处理什么样的值,这是最简单的解决方案,但这一个通常不起作用。例如,如果一个元素包含Namea而不是Name。。查看下面的帖子,了解通用解决方案。您可以使用
findall
安装split。
mylist = ['name1', 'name2', 'name3', 'name10', 'name11']
sorted_list = []

for n in range(100): #this gives you the order
    for item in mylist:
        if int(item[4:]) == n:
            sorted_list.append(item)

print(sorted_list)
['name1', 'name2', 'name3', 'name10', 'name11']