在python中,根据元素名称对长列表的元素进行分组

在python中,根据元素名称对长列表的元素进行分组,python,Python,我有一个很长的列表,如下所示,我分别根据(元素[0]、元素[3]、元素[2])进行排序。元素是指下划线之间的数字 list3=['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg', '20180406_175827_10_12.jpg', '20180406_175827_11_12.jpg', '20180409_190651_7_2.jpg', '20180409_1906

我有一个很长的列表,如下所示,我分别根据(元素[0]、元素[3]、元素[2])进行排序。元素是指下划线之间的数字

list3=['20180406_145813_4_1.jpg',
 '20180406_145813_5_1.jpg',
 '20180406_145813_6_1.jpg',
 '20180406_175827_10_12.jpg',
 '20180406_175827_11_12.jpg',
 '20180409_190651_7_2.jpg',
 '20180409_190651_8_2.jpg',
...]
现在,我想基于元素[3]拆分列表。我想要的结果是:

[['20180406_145813_4_1.jpg',
 '20180406_145813_5_1.jpg',
 '20180406_145813_6_1.jpg'],
 ['20180406_175827_10_12.jpg',
 '20180406_175827_11_12.jpg'],
 ['20180409_190651_7_2.jpg',
 '20180409_190651_8_2.jpg'],
...]
我有一个代码,它把每个名字打印成一个列表。我不知道如何在代码中按元素3分组:

for imagename in list3:
    element3 = imagename.split("_")[3]
    for j,m in groupby(list3):
        print(list(m))
您可以这样使用:

from itertools import groupby

list3 = ['20180406_145813_4_1.jpg',
         '20180406_145813_5_1.jpg',
         '20180406_145813_6_1.jpg',
         '20180406_175827_10_12.jpg',
         '20180406_175827_11_12.jpg',
         '20180409_190651_7_2.jpg',
         '20180409_190651_8_2.jpg']

result = [list(group) for _, group in groupby(list3, key=lambda x: x.split('_')[3])]
print(result)
输出

[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'], ['20180406_175827_10_12.jpg', '20180406_175827_11_12.jpg'], ['20180409_190651_7_2.jpg', '20180409_190651_8_2.jpg']]
对于循环,上述等效于以下

result = []
for _, group in groupby(list3, key=lambda x: x.split('_')[3]):
    result.append(list(group))
您可以这样使用:

from itertools import groupby

list3 = ['20180406_145813_4_1.jpg',
         '20180406_145813_5_1.jpg',
         '20180406_145813_6_1.jpg',
         '20180406_175827_10_12.jpg',
         '20180406_175827_11_12.jpg',
         '20180409_190651_7_2.jpg',
         '20180409_190651_8_2.jpg']

result = [list(group) for _, group in groupby(list3, key=lambda x: x.split('_')[3])]
print(result)
输出

[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'], ['20180406_175827_10_12.jpg', '20180406_175827_11_12.jpg'], ['20180409_190651_7_2.jpg', '20180409_190651_8_2.jpg']]
对于
循环,上述等效于以下

result = []
for _, group in groupby(list3, key=lambda x: x.split('_')[3]):
    result.append(list(group))
试试这个(不导入任何内容)

list3=['20180406_145813_4_1.jpg',
       '20180406_145813_5_1.jpg',
       '20180406_145813_6_1.jpg',
       '20180406_175827_10_12.jpg',
       '20180406_175827_11_12.jpg',
       '20180409_190651_7_2.jpg',
       '20180409_190651_8_2.jpg',
       ...]

res = []
for first, second, third in zip(*[iter(list3)]*3):
    res.append([first, second, third])
只需在
res
列表中添加
first、seconds、third

print(res)

[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'], 
 ['20180406_175827_10_12.jpg', ...]]
试试这个(不导入任何内容)

list3=['20180406_145813_4_1.jpg',
       '20180406_145813_5_1.jpg',
       '20180406_145813_6_1.jpg',
       '20180406_175827_10_12.jpg',
       '20180406_175827_11_12.jpg',
       '20180409_190651_7_2.jpg',
       '20180409_190651_8_2.jpg',
       ...]

res = []
for first, second, third in zip(*[iter(list3)]*3):
    res.append([first, second, third])
只需在
res
列表中添加
first、seconds、third

print(res)

[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'], 
 ['20180406_175827_10_12.jpg', ...]]