2016-06-26 10 views
1

Es ist schwer, mein Problem im Titel zu beschreiben. Ich denke, der Titel dieses Problems ist nicht sehr gut. Mein Problem ist das folgendeschnellste Weg in Python alle Kombinationen aufzulisten und den Index

Sagen wir, ich habe eine Liste [0,0,0,0,0], ich möchte 3 Einsen in diese 5 Steckplätze in der Liste setzen. Ich möchte alle möglichen Kombinationen aufzählen. In diesem Fall wird es 5 wählen 3, die 10 ist, zum Beispiel

[1,1,1,0,0] 
[1,0,1,0,1] 
.... 

Ich mag schließlich eine Liste von Listen zu bekommen, so dass jedes Element in der großen Liste (was immer noch eine Liste ist), speichert den Index jener in jedem Szenario, zB im obigen Beispiel sollte das erste Element in der endgültigen großen Liste [0,1,2] sein, das zweite Element in der endgültigen großen Liste sollte [0,2 sein, 4] ...

Gibt es einen schnellen Weg, dies zu erreichen? Ich glaube, ich muss die Bibliothek itertools verwenden, aber nicht sicher, welche spezifische Funktion sollte ich

Antwort

1

itertools.combinations Mit

Um alle möglichen binären Listen der Länge 5 mit 3 Einsen

N = 5 
zeros = [0]*N 
for comb in itertools.combinations(range(N), r = 3): 
    l = zeros.copy() 
    for indice in comb: 
     l[indice] = 1 

nicht zu erhalten sehr effizient, sollte aber schnell genug sein.

Um die „große Liste“ von Indizes zu erhalten, verwenden itertools.combinations(range(5), 3))

1

Ist das, was Sie suchen?

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

Verwandte Themen