[英]Comparing a list of tuples
我想比较一个元组列表,如果第一个元素相同,则比较第二个元素并返回最高的。
lis = [(1,10, "n"), (1,15,"n1"), (2,20,"n"),(2,35,"n1"),(3,123,"n"),(3,12,"n1")]
返回:
lis = [(1,15,"n1"), (2,35,"n1"), (3,123,"n")]
我不确定该怎么做,任何帮助将不胜感激。
我将使用itertools.groupby
首先将具有相同第一个元素的所有项目分组在一起,然后使用max
查找具有最大第二个元素的项目。
与其他答案不同,您可能具有来自不同“组”的不同数量的元素。
from itertools import groupby
from operator import itemgetter
lis = [(1,10, "n"), (1,15,"n1"), (2,20,"n"), (2,35,"n1"), (3,123,"n"),(3,12,"n1")]
lis.sort(key=itemgetter(0)) # groupby requires the iterable to be sorted,
# so making sure it is
grouped_by = groupby(lis, key=itemgetter(0))
output = [max(li, key=itemgetter(1)) for group, li in grouped_by]
print(output)
# [(1, 15, 'n1'), (2, 35, 'n1'), (3, 123, 'n')]
元组比较已经做到了,先比较第一个元素,然后再比较第二个元素,直到找到一个决胜局。
您需要做的就是zip
列表,以创建正确的比较:
zip(lis[::2], lis[1::2])
# This produces:
# (1, 10, 'n') (1, 15, 'n1')
# (2, 20, 'n') (2, 35, 'n1')
# (3, 123, 'n') (3, 12, 'n1')
创建所需的对,然后可以在列表理解中对它们进行比较以获得所需的结果:
r = [i if i > j else j for i,j in zip(lis[::2], lis[1::2])]
print(r)
# [(1, 15, 'n1'), (2, 35, 'n1'), (3, 123, 'n')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.