Skip to main content
 首页 » 编程设计

python之从列表中过滤记录

2025年05月04日9lyj

我是 python 的新手,希望得到一些帮助,如果有人能提供帮助,我将不胜感激,

我有一个下面的 python 列表列表,我想形成一个新列表,它将包含基于子列表第一个元素的最后一个子列表,例如。 ISIN=BE0974302342,我只想将 ['BE0974302342', 21, 19, 0, 2, 0] 添加到新列表并忽略所有第一次出现,我想使用 for 循环将每个子列表的第一个元素与第一个元素进行比较第二个子列表,但这不是一个干净的方法,这可以使用列表理解或一些内置方法来实现吗?

my_list = [['BE0974302342', 21, 0, 0, 0, 0],  
           ['BE0974302342', 21, 19, 0, 0, 0],  
           ['BE0974302342', 21, 19, 0, 2, 0],  
           ['FR0000073843', 22, 19, 0, 2, 0],  
           ['FR0000073843', 22, 20, 0, 2, 0],  
           ['FR0000073843', 22, 20, 0, 2, 0],  
           ['FR0000076861', 21, 20, 0, 2, 0],  
           ['FR0000076861', 21, 18, 0, 2, 0],  
           ['FR0000076861', 21, 18, 3, 2, 0],  
           ['FR0000076861', 21, 18, 3, 3, 0]] 
 
 new_list = [['BE0974302342', 21, 19, 0, 2, 0],  
             ['FR0000073843', 22, 20, 0, 2, 0],  
             ['FR0000076861', 21, 18, 3, 3, 0]] 

请您参考如下方法:

你可以使用 itertools.groupby按第一个元素对子列表进行分组,并保留每组的最后一个子列表:

from itertools import groupby 
from operator import itemgetter 
 
[list(v)[-1] for _,v in groupby(my_list, key=itemgetter(0))] 

输出

[['BE0974302342', 21, 19, 0, 2, 0], 
 ['FR0000073843', 22, 20, 0, 2, 0], 
 ['FR0000076861', 21, 18, 3, 3, 0]]