簡體   English   中英

python中最快的方法來枚舉所有組合並返回索引

[英]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)]

使用itertools.combinations

獲得長度為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM