[英]How to sort all combinations in python?
我有K=2
和N=3
並生成所有組合,如下所示:
list(itertools.product(range(1, N+1), repeat=K))
我得到
[(1, 1),
(1, 2),
(1, 3),
(2, 1),
(2, 2),
(2, 3),
(3, 1),
(3, 2),
(3, 3)]
我需要對這些組合進行排序以獲得
[(1, 1),
(2, 2),
(3, 3),
(1, 2),
(1, 3),
(2, 1),
(2, 3),
(3, 1),
(3, 2)]
對於一般的K
和N
我該怎么做?
就像有N
垃圾箱和K
物料,我想將所有可能的物料分配給垃圾箱,但從
因此,在示例中, (1, 1)
表示所有項目都在箱1中, (2, 2)
表示所有項目都在箱2中,以此類推。 (1, 2)
表示項目1在箱1中,而項目2在垃圾箱2中,依此類推。
它已經生成了幾乎您想要的方式,因此您可以利用python的穩定排序優勢:
>>> L = list(itertools.product(range(1, N+1), repeat=K))
>>> L.sort(key=lambda t: len(set(t)))
>>> L
[(1, 1), (2, 2), (3, 3), (1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
這只是將具有最相等值的元組推到前面。 應該將其推廣到與您描述的方式一致的更高維度。
您可以簡單地做到這一點:
import itertools
K = 2
N = 3
a = list(itertools.product(range(1, N+1), repeat=K))
a_sorted = sorted(a, key=lambda t: -(t[0] == t[1]))
lambda
函數告訴sorted
將等號的元組放在開頭。 我們還需要對數字值進行排序,但是由於這是sorted
的默認行為,因此我們無需手動添加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.