[英]fastest way in python to enumerate all combinations and return the index
在標題中很難描述我的問題。 我認為這個問題的標題不是很好。 我的問題如下
假設我有一個列表[0,0,0,0,0],我想在列表中的這5個插槽中放入3個。 我想列舉所有可能的組合。 在這種情況下,它將是5選擇3,即10,例如,
[1,1,1,0,0]
[1,0,1,0,1]
....
我希望最終得到一個列表列表,使得大列表中的每個元素(仍然是列表)在每個場景中存儲那些元素的索引,例如,在上面的示例中,最后一個元素中的第一個元素list應該是[0,1,2],最后一個大列表中的第二個元素應該是[0,2,4] ...
有沒有快速實現這一目標的方法? 我想我需要使用庫itertools,但不確定我應該使用哪個特定的函數
這是你想要的?
from itertools import combinations
num_ones = 3
slots = 5
comb_indices = list(combinations(range(5),3))
print comb_indices
[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 3), (0, 2, 4), (0, 3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
獲得長度為5的所有可能的二進制列表,其中包含3個
N = 5
zeros = [0]*N
for comb in itertools.combinations(range(N), r = 3):
l = zeros.copy()
for indice in comb:
l[indice] = 1
不是很有效,但應該足夠快。
要獲得索引的“大列表”,請使用itertools.combinations(range(5), 3))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.