首页 > 解决方案 > 如何从列表中分离 cam1,2,3,4,5,6 第一个图像

问题描述

lst = ['Cam218-10-03_16-05-21-54.jpg',     
       'Cam318-10-03_17-04-21-54.jpg',
       'Cam418-10-03_16-04-21-54.jpg',  
       'Cam218-10-02_16-05-21-54.jpg',
       'Cam318-10-02_17-04-21-54.jpg',  
       'Cam418-10-02_16-04-21-54.jpg',
       'Cam218-10-02_16-04-08-31.jpg',  
       'Cam318-10-02_16-04-08-30.jpg', 
       'Cam418-10-02_16-04-08-30.jpg',  
       'Cam518-10-02_16-04-08-35.jpg',
       'Cam618-10-02_16-04-08-36.jpg',  
       'Cam118-10-02_16-04-09-33.jpg', 
       'Cam218-10-02_16-04-09-33.jpg',  
       'Cam318-10-02_16-04-09-33.jpg', 
       'Cam418-10-02_16-04-09-33.jpg',  
       'Cam518-10-02_16-04-09-33.jpg',
       'Cam618-10-02_16-04-09-33.jpg',  
       'Cam118-10-02_16-04-11-53.jpg', 
       'Cam218-10-02_16-04-11-53.jpg',  
       'Cam318-10-02_16-04-11-53.jpg', 
       'Cam418-10-02_16-04-08-30.jpg',  
       'Cam118-10-02_16-04-08-31.jpg', 
       'Cam518-10-02_16-04-11-53.jpg',  
       'Cam118-10-02_16-04-11-53.jpg']

从这个列表中我想要输出:

['Cam118-10-02_16-04-08-31.jpg',
 'Cam218-10-02_16-04-08-31.jpg',
 'Cam318-10-02_16-04-08-30.jpg', 
 'Cam418-10-02_16-04-08-30.jpg',
 'Cam518-10-02_16-04-08-35.jpg',
 'Cam618-10-02_16-04-08-36.jpg'] 

通过使用 Python。有人可以帮助我吗?

标签: pythonstringpython-3.xlist

解决方案


itertools.groupby- O(n*log(n))

>>> from itertools import groupby
>>> [next(g) for _, g in groupby(sorted(lst), key=lambda cam: cam.partition('-')[0])]
['Cam118-10-02_16-04-08-31.jpg',
 'Cam218-10-02_16-04-08-31.jpg',
 'Cam318-10-02_16-04-08-30.jpg',
 'Cam418-10-02_16-04-08-30.jpg',
 'Cam518-10-02_16-04-08-35.jpg',
 'Cam618-10-02_16-04-08-36.jpg']

手动跟踪重复项(输出未排序,但对其他读者可能有用) - O(n)

>>> seen = set()
>>> result = []
>>> 
>>> for cam in lst:
...:    model, *_ = cam.partition('-')
...:    if model not in seen:
...:        result.append(cam)
...:        seen.add(model)
...:        
>>> result
['Cam218-10-03_16-05-21-54.jpg',
 'Cam318-10-03_17-04-21-54.jpg',
 'Cam418-10-03_16-04-21-54.jpg',
 'Cam518-10-02_16-04-08-35.jpg',
 'Cam618-10-02_16-04-08-36.jpg',
 'Cam118-10-02_16-04-09-33.jpg']

推荐阅读