为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2021-10-10 16:05:36
我有一个像下面这样的长列表,我分别根据 (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',...]现在,我想根据 element[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))
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您可以像这样使用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']]

上面的列表推导等价于以下for循环:


result = []

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

    result.append(list(group))


查看完整回答
反对 回复 2021-10-10
?
动漫人物

TA贡献1815条经验 获得超10个赞

试试这个(不导入任何东西):


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


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号