Py学习  »  Python

基于元素名对python中长列表的元素进行分组

Jacob nessuno • 4 年前 • 807 次点击  

我有一个很长的列表,如下所示,分别基于(element[0]、element[3]、element[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'],
...]

我有一个代码,把每个名字都打印成一个列表。我不知道在这段代码中如何按element3分组:

for imagename in list3:
    element3 = imagename.split("_")[3]
    for j,m in groupby(list3):
        print(list(m))
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40745
 
807 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Aaron_ab Krishan Prabodha Silv
Reply   •   1 楼
Aaron_ab Krishan Prabodha Silv    5 年前

试试这个( 不导入任何内容) :

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])

只需附加一个列表 first, seconds, third res 列表

print(res)

[['20180406_145813_4_1.jpg', '20180406_145813_5_1.jpg', '20180406_145813_6_1.jpg'], 
 ['20180406_175827_10_12.jpg', ...]]
Daniel Mesejo
Reply   •   2 楼
Daniel Mesejo    5 年前

你可以使用 itertools.groupby 这样地:

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

以上 list comprehension 相当于 for 循环:

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