我有一个多对象列表,如下所示(简化版本)
listA = [[obj1(val=1),obj2(val=1)],[obj2(val=4),obj3(val=2)]]
listB = [[obj4(val=1),obj5(val=1)],[obj6(val=5),obj7(val=3)]]
listC = [[obj8(val=1),obj9(val=1)],[obj10(val=6),obj11(val=4)]]
我想通过比较每个多列表的子列表,从上述多列表获取具有特定属性最大值的对象列表。如果所有比较对象的属性值都相同,则应该获得任何一个对象。
输出:
maxList = [obj1(value=1),obj10(val=6)]
类似的question可以从列表中获取具有最大属性值的对象,但是这种情况适用于多列表。我知道可以使用嵌套的for循环来实现,但是必须有更好的方法使用itertools和getattr来做到这一点?
答案 0 :(得分:1)
为简化起见,让我们对正整数进行演示。将此方法适应您的对象。
给出
import itertools as it
a = [[1, 1], [3, 2]]
b = [[1, 1], [5, 3]]
c = [[1, 1], [6, 3]]
代码
list(map(max, [list(it.chain(*col)) for col in zip(a, b, c)]))
# [1, 6]
等价
[max([x for x in it.chain(*col)]) for col in zip(a, b, c)]
# [1, 6]