排序我的列表,由glob破坏

时间:2018-03-28 14:41:40

标签: python sorting plot

我正在做一个物理项目,我想绘制一些东西。我从每个文件中取出平均值,我想绘制这些方法。为了读取这些文件,我使用了glob,这搞砸了我数据的整个顺序。当我尝试使用"排序"它没有工作的方式。这是我的代码:

'0A.txt',
 '10A.txt',
 '11A.txt',
 '12A.txt',
 '13A.txt',
 '14A.txt',
 '15A.txt',
 '16A.txt',
 '17A.txt',
 '18A.txt',
 '19A.txt',
 '1A.txt',
 '20A.txt',
 '21A.txt',
 '22A.txt',

它的排序方式是:

./labelImg.py 

而不是1-22

1 个答案:

答案 0 :(得分:1)

sorted函数需要一些可选参数。其中一个是“key”,其中“指定一个参数的函数,用于从每个列表元素中提取比较密钥”。因此,您可以使用该函数将文件名转换为数字并返回该数字。我使用正则表达式来做到这一点:

lijst = sorted(lijst, key=lambda x: int(re.sub("[^0-9]","", x)))

该函数接受参数x,去除所有非数字,并返回一个整数。例如:"1A.txt" - > 1。返回

['0A.txt', '1A.txt', '10A.txt', '11A.txt', '12A.txt', '13A.txt', '14A.txt', '15A.txt', '16A.txt', '17A.txt', '18A.txt', '19A.txt', '20A.txt', '21A.txt', '22A.txt']

您可以使用类似的技术将列表中的每个文件名映射到一个数字:

lijst= list(map(lambda x: int(re.sub("[^0-9]","", x)), lijst))

map函数的返回值将转换为列表。返回

[0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]