2012-12-22 5 views
8

Eventuali duplicati:
Power set and Cartesian Product of a set pythonPython itertools permutazioni come includere caratteri che si ripetono

con Python Itertools.permutations() Vorrei ricevere e l'uscita di permutazioni con caratteri che si ripetono. Ad esempio questa mia funzione qui sotto e il suo output corrente.

def perm(n,i): 
    b = 0 
    while b < n: 
     n= n -1 
     from itertools import permutations as p 
     file.write('\n'.join([''.join(item) for item in p(i,n)])) 
perm(4,'0123') 

l'output è:

012 
013 
021 
023 
031 
032 
102 
103 
120 
123 
130 
132 
201 
203 
210 
213 
230 
231 
301 
302 
310 
312 
320 
321..... 

come potrei ottenere un output come 112 o 222?

da ciò che ho capito le combinazioni non sono specifiche dell'ordine in cui le permutazioni sono. quello che sto cercando è trovare tutte le combinazioni quindi ogni permutazione per ogni combinazione. È possibile?

+1

Perché importare "permutazioni" ogni volta nel ciclo? E perché la ';' linea estesa? Potresti ripulirlo almeno ... –

risposta

18

Non si desidera assolutamente permutazioni. Volete il prodotto cartesiano:

import itertools 

def perm(n, seq): 
    for p in itertools.product(seq, repeat=n): 
     file.write("".join(p)) 
     file.write("\n") 

perm(4, "0123") 
3

Quello che stai cercando è uno Cartesian product, non una permutazione, che viene fornita anche da itertools.

Si potrebbe fare bene a familiarizzare con le differenze tra permutazione, combinazione, combinazione con sostituzione e prodotto cartesiano per decidere cosa funziona meglio la propria applicazione, ma è probabile che si stia cercando un'altra delle opzioni.

+0

Anch'io l'ho pensato anche per un secondo, ma l'OP sembra voler sia '012' che' 102' - o almeno non ha commentato nella sua lista - in che caso è probabilmente dopo "itertools.product". – DSM

+0

Sì, penso che tu abbia ragione. Io modifico – acjay