我有形式的嵌套元組的列表的列表高級排序標準:嵌套元組
[(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