Python 如何使用子字符串对该字符串列表进行排序?

Python 如何使用子字符串对该字符串列表进行排序?,python,list,sorting,Python,List,Sorting,我有一个列表,其元素如下所示: Region_1.csv, Region_33.csv, Region_2.csv, Region_4.csv, Region_105.csv, .... 名单上的所有数字都在1-105之间,没有遗漏。 我想根据区域编号对该列表进行排序,如下所示: Region_1.csv, Region_2.csv, Region_3.csv, Region_4.csv, Region_105.csv etc. 由于数字有可变的数字,我很难对这个列表进行排序 谢谢。您可以使

我有一个列表,其元素如下所示:

Region_1.csv, Region_33.csv, Region_2.csv, Region_4.csv, Region_105.csv, ....
名单上的所有数字都在1-105之间,没有遗漏。 我想根据区域编号对该列表进行排序,如下所示:

Region_1.csv, Region_2.csv, Region_3.csv, Region_4.csv, Region_105.csv etc.
由于数字有可变的数字,我很难对这个列表进行排序

谢谢。

您可以使用带有自定义函数的sorted,首先按进行拆分。然后通过uux:

您可以使用带有自定义函数的sorted,首先按进行拆分。然后通过uux:

使用re模块,如果您想在字符串中找到一些新奇的东西:

l = ['Region_105.csv', 'Region_1.csv', 'Region_33.csv', 'Region_2.csv', 'Region_4.csv']

import re
print(sorted(l, key=lambda v: int(re.findall('\d+', v)[0])))
输出:

['Region_1.csv', 'Region_2.csv', 'Region_4.csv', 'Region_33.csv', 'Region_105.csv']
['Region_1.csv'、'Region_2.csv'、'Region_4.csv'、'Region_33.csv', “Region_105.csv”]

使用re模块,如果您想在字符串中找到一些新奇的东西:

l = ['Region_105.csv', 'Region_1.csv', 'Region_33.csv', 'Region_2.csv', 'Region_4.csv']

import re
print(sorted(l, key=lambda v: int(re.findall('\d+', v)[0])))
输出:

['Region_1.csv', 'Region_2.csv', 'Region_4.csv', 'Region_33.csv', 'Region_105.csv']
['Region_1.csv'、'Region_2.csv'、'Region_4.csv'、'Region_33.csv', “Region_105.csv”]


您可以使用正则表达式提取区域号,创建{region number:fileName}形式的字典,然后根据键对字典进行排序。 用于提取区域编号和创建字典的代码:

import re
files=['Region_1.csv','Region_33.csv','Region_2.csv','Region_4.csv','Region_105.csv']
d=dict()
for f in files:
   rnum=re.find('[a-bA-B]_([0-9])\.csv$',f)
   d[rnum]=f

要对字典中的项进行排序,请参阅:

您可以使用正则表达式提取区域编号,并创建一个{region number:fileName}形式的字典,然后根据键对字典进行排序。 用于提取区域编号和创建字典的代码:

import re
files=['Region_1.csv','Region_33.csv','Region_2.csv','Region_4.csv','Region_105.csv']
d=dict()
for f in files:
   rnum=re.find('[a-bA-B]_([0-9])\.csv$',f)
   d[rnum]=f
要对字典中的项目进行排序,请参阅:

您还可以使用字符串的查找方法:

inList = ['Region_1.csv', 'Region_33.csv', 'Region_2.csv', 'Region_4.csv', 'Region_105.csv']

outList = sorted(inList, key=lambda elem: int(elem[elem.find('_')+1:elem.find('.')]))

print(outList)
输出:

['Region_1.csv', 'Region_2.csv', 'Region_4.csv', 'Region_33.csv', 'Region_105.csv']
您还可以使用字符串的查找方法:

inList = ['Region_1.csv', 'Region_33.csv', 'Region_2.csv', 'Region_4.csv', 'Region_105.csv']

outList = sorted(inList, key=lambda elem: int(elem[elem.find('_')+1:elem.find('.')]))

print(outList)
输出:

['Region_1.csv', 'Region_2.csv', 'Region_4.csv', 'Region_33.csv', 'Region_105.csv']

您也可以尝试以下方法:

>>> l = ['Region_105.csv', 'Region_1.csv', 'Region_33.csv', 'Region_2.csv', 'Region_4.csv']
>>> sorted(l, key=lambda x: int(''.join(filter(str.isdigit, x))))
['Region_1.csv', 'Region_2.csv', 'Region_4.csv', 'Region_33.csv', 'Region_105.csv']

您也可以尝试以下方法:

>>> l = ['Region_105.csv', 'Region_1.csv', 'Region_33.csv', 'Region_2.csv', 'Region_4.csv']
>>> sorted(l, key=lambda x: int(''.join(filter(str.isdigit, x))))
['Region_1.csv', 'Region_2.csv', 'Region_4.csv', 'Region_33.csv', 'Region_105.csv']

你尝试了什么?你尝试了什么?