社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Jacob nessuno • 6 年前 • 2186 次点击  

我有一个很长的列表,如下所示,分别基于(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
文章 [ 2 ]  |  最新文章 6 年前
Aaron_ab Krishan Prabodha Silv
Reply   •   1 楼
Aaron_ab Krishan Prabodha Silv    7 年前

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

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    7 年前

你可以使用 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))