我有一个要按数字组织的字符串列表,看起来像这样:
List=['Core_0_0.txt', 'Core_0_1.txt','Core_0_2.txt',...'Core_1_0.txt','Core_2_3.txt', ]
但是当我对它排序时(列表)
该列表未正确排序。 我将这些值保留为字符串,并且必须按数字对其进行排序非常重要;即0_1,0_2,0_3 .... 31_1,它们都具有Core_X_X.txt。我该怎么做。
答案 0 :(得分:1)
如果可以假设所有条目看起来都像*_N1_N2.txt
,则可以使用str.split
方法和排序键功能对列表进行正确排序。可能看起来像这样
sorted_list = sorted(List, key = lambda s: (int(s.split("_")[1]), int(s.split("_")[2].split(".")[0])))
从本质上讲,这会在内部创建类似(N1, N2)
的元组,其中文件名为*_N1_N2.txt
,并根据N1
值进行排序。如果有平局,它将使用N2
值。
答案 1 :(得分:0)
您的问题可能是另一个question的重复项。 我再次在这里为您发布。 您只需要将“ alist”更改为“ List”即可。
import re
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(text):
'''
alist.sort(key=natural_keys) sorts in human order
http://nedbatchelder.com/blog/200712/human_sorting.html
(See Toothy's implementation in the comments)
'''
return [ atoi(c) for c in re.split(r'(\d+)', text) ]
alist=[
"something1",
"something12",
"something17",
"something2",
"something25",
"something29"]
alist.sort(key=natural_keys)
print(alist)
收益
['something1','something2','something12','something17','something25','something29']