我有形式的嵌套元组的列表的列表高级排序标准:嵌套元组
[(a, (b, c)), ...]
现在我想挑最大化一个,同时最小化b和元件c。例如,在
[(7, (5, 1)), (7, (4, 1)), (6, (3, 1))]
的赢家应该是
(7, (4, 1))
任何帮助表示赞赏。
我有形式的嵌套元组的列表的列表高级排序标准:嵌套元组
[(a, (b, c)), ...]
现在我想挑最大化一个,同时最小化b和元件c。例如,在
[(7, (5, 1)), (7, (4, 1)), (6, (3, 1))]
的赢家应该是
(7, (4, 1))
任何帮助表示赞赏。
在我的理解中,你想按a递减排序,然后按b递增排序,然后按c排序。如果这是正确的,你可以这样做:
>>> l=[(7, (5, 1)), (7, (4, 1)), (6, (3, 2)), (6, (3, 1))]
>>> sorted(l, key = lambda x: (-x[0], x[1]))
[(7, (4, 1)), (7, (5, 1)), (6, (3, 1)), (6, (3, 2))]
选择“赢家”就像挑选第一个元素一样简单。
如果b和c应该总结,那么在我的示例中,它将仅仅是sum(x[1])
而不是x[1]
。
我的键功能返回一个元组因为Python正确排序的元组包含多个元素:
>>> sorted([(1,2), (1,1), (1,-1), (0,5)])
[(0, 5), (1, -1), (1, 1), (1, 2)]
'max'具有'key'参数,所以不需要创建中间列表。这些迹象当然需要扭转。 – SilentGhost 2010-09-30 14:30:58
@SilentGhost:当然'max'函数在这里是个好主意。我想指出的是,根据OP试图解决的问题(或家庭作业),可能需要选择多个项目。因此,预先列出的名单会更好。 – AndiDog 2010-09-30 14:34:54
这实际上是一个真正的问题,没有作业。不管怎么说,还是要谢谢你。 – mathias 2010-09-30 14:58:49
>>> max(lst, key=lambda x: (x[0], -x[1][0], -x[1][1]))
(7, (4, 1))
鉴于'(7,(4,1))'和'(7,(3,2))',哪一个赢? – Daenyth 2010-09-30 14:38:00
好问题。 (7,(3,2))胜出。 – mathias 2010-09-30 14:57:37
让我猜测你在排序中的优先顺序:最大的'a',然后是最小的'b',然后是最小的'c'。是对的吗? – eksortso 2010-09-30 15:48:02