我需要從range(1, 51)
中選擇6個整數,這樣不會選擇兩個連續的整數。 (1, 3, 6, 9, 13, 28)
是有效的選擇,但(1, 3, 4, 9, 13, 28)
不是。我需要建立一個所有這些可能組合的列表,每個組合都在一個元組中。發電機也可以做,而不是列表。我知道我需要在這裏使用類似itertools.combinations
的東西,但我無法弄清楚如何消除連續值的元組。我寫了這個代碼,從給定範圍內選擇整數
>>> import itertools
>>> l = list(itertools.combinations(range(1, 51), 6))
>>> len(l)
13983816
也就是說,如果有什麼可以選擇的元組沒有約束我期待的長度,即,50!/(44!6!)
。任何幫助?
也許通過根exp在那裏。 '(itertools.combinations中的數字的數字(範圍(1,50),6)如果全部(xy> 1 for x,y in zip(t [numbers:],numbers)))' –
我想在技術上OP需要一個列表,所以列表comp它,而不是:)。應該達到約700萬? –
@adsmith genexp也會做得很好。謝謝。 :) – Guy