首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据python中其他列表的值获取最大子列表

根据python中其他列表的值获取最大子列表
EN

Stack Overflow用户
提问于 2019-01-02 22:16:45
回答 4查看 117关注 0票数 2

希望根据条件获取在指定索引上具有最大值的子列表。

代码语言:javascript
复制
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]]]

和另一个列表

代码语言:javascript
复制
baselist=[['RD-2', 100],['RD-3', 200],['RD-5', 240]]

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

代码语言:javascript
复制
flist=[['RD-2', 'c', 127],['RD-3', 'b', 140],['RD-5', 'a', 120]]

帮帮我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-02 22:22:27

试试这个:

代码语言:javascript
复制
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将为:

代码语言:javascript
复制
[['RD-2', 'c', 127], ['RD-3', 'b', 140], ['RD-5', 'a', 120]]

您还可以使用itertools.product稍微简化一下for循环:

代码语言:javascript
复制
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]))

或者也只有一行:

代码语言:javascript
复制
flist = [max(i, key=lambda x:x[2]) for i, item in product(mainlist,baselist) if i[0][0] == item[0]]
票数 3
EN

Stack Overflow用户

发布于 2019-01-02 22:33:35

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

代码语言:javascript
复制
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]]
票数 2
EN

Stack Overflow用户

发布于 2019-01-02 22:33:54

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

代码语言:javascript
复制
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]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54007928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档