繁体   English   中英

比较python中列表列表中的元素并找到匹配项

[英]Compare elements in a list of lists in python and finding a match

我在Python中有一个列表列表,每个列表包含5个元素。 例如

lists = [['x1', 'y1', 'z1', '10', ''],
         ['x1', 'y1', 'z1', '', '5'], 
         ['x2', 'y2', 'z2', '10', ''],
         ['x2', 'y2', 'z2', '10', ''],
         ['x1', 'y1', 'z1', '', '5'],
         ['x3', 'y3', 'z3', '', '40'],
         ['x2', 'y2', 'z2', '', '20']]

我想比较每个列表的前3个元素,如果有匹配项,那么对于匹配列表,我想添加每行的第4列并将其与匹配列表第5列的总和进行比较。 如果匹配列表集中第4列和第5列的总和匹配,则需要输出行。

因此,在上面的示例中,输出应为

output = [['x1', 'y1', 'z1', '10', '10'],
          ['x2', 'y2', 'z2', '20', '20']]           

有人可以为此提供解决方案吗?

谢谢

一线解决方案!

output = [l[:4] + [str(sum(int(j[4]) for j in lists if j[:3] == l[:3] and j[4]))] for l in (l for l in lists if l[3])]

output为:

[['x1', 'y1', 'z1', '10', '10'], ['x2', 'y2', 'z2', '20', '20']]

我没有尝试解释该行,而是将过程扩展为更大的for-loop向下滚动以获取有关其工作方式的正确解释。

output = []
for l in (l for l in lists if l[3]):
    sm = 0
    for j in lists:
         if j[:3] == l[:3] and j[4]:
              sm += int(j[4])
    sm = str(sm)
    if sm == l[3]:
        output.append(l[:4] + [sm])

怎么样?

好吧,我们正在遍历生成器l for l in lists if l[3] 本质上,我们只想开始遍历实际上在第三个索引中具有值的列表,以便我们可以对其他具有相同前三个元素的列表进行汇总,并将其与l[3]进行比较。

然后,将sum变量( sm )声明为0 ,并将其他列表元素添加到该变量。

接下来,我们要开始遍历lists中可能具有相同的前三个元素的其他列表。

然后,我们检查前三个元素是否相同( j[:3] == l[:3] ),还检查第四个元素的总和是否确实有东西要累加(否则,当尝试将空字符串转换为int )。 然后,如果通过了此测试,我们将j[4]添加到sm并继续进入下一个列表。

接下来,将sum( sm )转换为字符串,因为这是末尾所需的数据类型,并保存将l[3]转换为整数。

最后,我们将此字符串与原始列表中的第四个元素进行比较-如果相同,则将原始列表以及总和(使用列表串联)附加到output列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM