按数字对字符串列表进行排序

时间:2019-05-02 19:37:14

标签: python-3.x

我有一个要按数字组织的字符串列表,看起来像这样:

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。我该怎么做。

2 个答案:

答案 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']