基于python中其他列表的值获取max子列表

2024-10-02 22:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

要获取在基于条件的指定索引上具有最大值的子列表。你知道吗

mainlist=[[['RD-2', 'a', 120], ['RD-2', 'b', 125], ['RD-2', 'c', 127]], [['RD-3', 'a', 120], ['RD-3', 'b', 140]], [['RD-5', 'a', 120]],[['RD-7', 'a', 122]]]

还有另一张单子

baselist=[['RD-2', 100],['RD-3', 200],['RD-5', 240]]

对于baselist中的每个第一个子元素,我需要mainlist中的1个完整子列表,它在第二个索引位置具有最大值。 输出应该是

flist=[['RD-2', 'c', 127],['RD-3', 'b', 140],['RD-5', 'a', 120]]

帮帮我。你知道吗


Tags: 元素列表rd条件单子flist帮帮我mainlist
3条回答

更紧凑一点,但使用列表理解的结果相同:

max_entries = [max(x, key=lambda x:x[2]) for x in mainlist]
flist = [max_entry for max_entry in max_entries for base_entry in baselist if max_entry[0]==base_entry[0]]

试试这个:

flist = []               
for item in baselist: 
     for i in mainlist:       
         if i[0][0] ==item[0]:               
             flist.append(max(i, key=lambda x:x[2]))

flist将是:

[['RD-2', 'c', 127], ['RD-3', 'b', 140], ['RD-5', 'a', 120]]

也可以使用itertools.product来简化for循环:

from itertools import product    

flist = []               
for i, item in product(mainlist,baselist):      
     if i[0][0] ==item[0]:               
          flist.append(max(i, key=lambda x:x[2]))

或者仅仅在一行中:

flist = [max(i, key=lambda x:x[2]) for i, item in product(mainlist,baselist) if i[0][0] == item[0]]

下面是使用列表理解的一种方法:

base = list(zip(*baselist))[0]
[max(i, key=lambda x:x[2]) for i in mainlist if i[0][0] in base]
[['RD-2', 'c', 127], ['RD-3', 'b', 140], ['RD-5', 'a', 120]]

相关问题 更多 >