根据位置排序字符串列表

4

我有一个字符串列表,其模式如下

my_list = ['/path/to/my/data/S1B_IW_GRDH_1SDV_20190610T030906_20190610T030931_016628_01F4BE_6B99_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190523T030954_20190523T031019_027349_0315A8_999E_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190511T030953_20190511T031018_027174_03102E_402F_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190628T030956_20190628T031021_027874_032595_0B1F_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190604T030955_20190604T031020_027524_031B16_BD33_VV.tif',
     '/path/to/my/data/S1B_IW_GRDH_1SDV_20190622T030907_20190622T030932_016803_01F9F1_D6E9_VV.tif',
     '/path/to/my/data/S1B_IW_GRDH_1SDV_20190505T030904_20190505T030929_016103_01E4AD_17B5_VV.tif']

我想按照每个字符串中的时间信息(20190610,.....)按时间顺序对列表进行排序。问题在于,每个字符串开头都有模式S1AS1B,这使得使用简单的mylist.sort()不能直接起作用。
通过查看其他帖子,我发现解决方案是使用key参数和某种模式。
我的问题是,如何从列表中每个字符串的特定位置开始排序。在我的情况下,我想从位置35开始排序,紧跟在_1SDV_之后。
我已经看到了一些选项,比如
from operator import itemgetter

my_list.sort(key = itemgetter(35)) 

或者
my_list.sort(key = lambda x: x[35])

你的意思是这个:20190610T030906 - Dani Mesejo
@DanielMesejo 是的,但基本上我只对按日期排序感兴趣,你可以看到那里 - 20190610 - GCGM
8
使用以下代码片段:my_list.sort(key=lambda x: x[35:]) - user2390182
@schwobaseggl,只有:将我与目标分开了,哈哈。如果您将其作为答案添加,我将很高兴接受它。 - GCGM
2
@schwobaseggl 也可以这样写:my_list.sort(key=itemgetter(slice(35, None))) - wjandrea
2个回答

2

从评论中复制@schwobaseggl的解决方案,以下解决方案应该有效。

my_list.sort(key = lambda x: x[35:])


例子:

>>> my_list = ['91', '82', '73', '64', '55', '46', '37', '28', '19']
>>> my_list.sort()
>>> my_list
['19', '28', '37', '46', '55', '64', '73', '82', '91']
>>> my_list.sort(key = lambda x: x[1:]) # sorting after first position
>>> my_list
['91', '82', '73', '64', '55', '46', '37', '28', '19']

1
使用正则表达式:
import regex as re

my_list = ['/path/to/my/data/S1B_IW_GRDH_1SDV_20190610T030906_20190610T030931_016628_01F4BE_6B99_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190523T030954_20190523T031019_027349_0315A8_999E_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190511T030953_20190511T031018_027174_03102E_402F_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190628T030956_20190628T031021_027874_032595_0B1F_VV.tif',
     '/path/to/my/data/S1A_IW_GRDH_1SDV_20190604T030955_20190604T031020_027524_031B16_BD33_VV.tif',
     '/path/to/my/data/S1B_IW_GRDH_1SDV_20190622T030907_20190622T030932_016803_01F9F1_D6E9_VV.tif',
     '/path/to/my/data/S1B_IW_GRDH_1SDV_20190505T030904_20190505T030929_016103_01E4AD_17B5_VV.tif']

my_list.sort(key=lambda x: re.findall("\d{8}", x)[0])

print(my_list)

输出:

['/path/to/my/data/S1B_IW_GRDH_1SDV_20190505T030904_20190505T030929_016103_01E4AD_17B5_VV.tif',
 '/path/to/my/data/S1A_IW_GRDH_1SDV_20190511T030953_20190511T031018_027174_03102E_402F_VV.tif',
 '/path/to/my/data/S1A_IW_GRDH_1SDV_20190523T030954_20190523T031019_027349_0315A8_999E_VV.tif',
 '/path/to/my/data/S1A_IW_GRDH_1SDV_20190604T030955_20190604T031020_027524_031B16_BD33_VV.tif',
 '/path/to/my/data/S1B_IW_GRDH_1SDV_20190610T030906_20190610T030931_016628_01F4BE_6B99_VV.tif',
 '/path/to/my/data/S1B_IW_GRDH_1SDV_20190622T030907_20190622T030932_016803_01F9F1_D6E9_VV.tif',
 '/path/to/my/data/S1A_IW_GRDH_1SDV_20190628T030956_20190628T031021_027874_032595_0B1F_VV.tif']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接