python - 如何比较python中列表列表中的项目
问题描述
我是 python 的新手,只是在做项目时学习东西,在这里我有一个列表列表,我需要在第二列和最后一列之间进行比较,并获取距离最大的列表的输出。此外,我正在复制一个列表。如果有人可以帮助我在 ag 中的单个列表列表中执行此操作,那将非常有帮助。提前致谢
如果这是一个输入,那么输出应该是,
ag = [['chr12','XX',1,5,4],
['chr12','XX',2,5,3],
['chr13','ZZ',6,10,4],
['chr13','ZZ',8,9,1],
['ch14','YY',12,15,3],['ch14','YY',12,15,3]]
EXPECTED OUTPUT:
['chr12','XX',1,5,4]
['chr13','ZZ',6,10,4]
['ch14','YY',12,15,3]
#However I tried of replicating the list like
#INPUT
ag =
[['chr12','XX',1,5,4],
['chr12','XX',2,5,3],
['chr13','ZZ',6,10,4],
['chr13','ZZ',8,9,1],
['ch14','YY',12,15,3],
['ch14','YY',12,15,3]]
bg =
[['chr12','XX',1,5,4],
['chr12','XX',2,5,3],
['chr13','ZZ',6,10,4],
['chr13','ZZ',8,9,1],
['ch14','YY',12,15,3],
['ch14','YY',12,15,3]]
#The code which I tried was
c= []
for i in ag:
for j in bg:
if i[0]==j[0] and i[1]==j[1] and i[4]>j[4]:
c.append(i)
the output which i get is
[['chr12', 'XX', 1, 5, 4], ['chr13', 'ZZ', 6, 10, 4]]
解决方案
简而言之:要比较列表的可迭代(例如列表)中的项目,请使用key
max/min 函数的关键字 agument。它接受一个函数或 lambda 表达式,并在给key
定每个值时将给定值与函数的结果进行比较。
假设您真正想要的是减少列表列表,以便条目的第二个元素是唯一的,并且您希望最后一个元素确定在冗余第二个值的情况下保留哪个条目:
如果迭代有任何问题,itertools有答案。在这种情况下,我们只需要带有关键字参数的groupby
方法和标准 Python 的maxkey
方法。
from itertools import groupby
def filter(matrix):
filtered = [] # create a result list to hold the rows (lists) we want
for key, rows in groupby(matrix, lambda row: row[1]): # get the rows grouped by their 2nd element and iterate over that
filtered.append(max(rows, key=lambda row: row[-1])) # add the line that among its group has the largest last value to our result
return filtered # return the result
我们可以将其压缩到单个生成器表达式或列表推导中,但对于初学者来说,上面的代码应该足够复杂。
请务必遵循 Stack Overflow 的未来问题指南,以防止评分低,并确保及时和高质量的答案。
推荐阅读
- python - 如何解释这个“过滤器中的 lambda 在计算素数时会改变结果”
- r - 编写一个函数以输出 R 中多列的给定输入值的最小值、平均值和最大值
- javascript - 如何使用此代码段显示不同的值?
- javascript - 如何在不滚动的情况下显示 html5 验证消息?
- c - USBport在进程打开后是否可以保持打开状态?
- kubernetes - 带有 mysql 和 wordpress 的 POD
- javascript - 试图注册两个同名的视图 RCTVideo
- jquery - 在 img src 中嵌入 php 代码不允许缩略图
- virtualbox - 无法通过主机获取链接到沙盒 IP 地址的 localhost
- c# - 如何更新或删除一个表中的数据并将该更改反映在另一个表中