python自定义排序列表1/2/3/./9/10
我有一个文件名如下的python列表: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
[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']