如何从 N 个对象的多列表中按最大属性值获取对象列表?
How to get a list of objects by maximum attribute value from N multi-list of objects?
我有多个对象列表如下(简化版)
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 来做到这一点?
为简化起见,让我们演示一下常规整数。使这种方法适用于您的对象。
给定
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]
我有多个对象列表如下(简化版)
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 来做到这一点?
为简化起见,让我们演示一下常规整数。使这种方法适用于您的对象。
给定
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]