Forum >> Principianti >> Calcolo disposizioni con ripetizione - itertools?

Pagina: 1

Ciao,

dovrei calcolare tutte le disposizioni di una lista di elementi in cui gli elementi possono esser ripetuti.

Ad es. se gli elementi sono [a,b,c] e la stringa finale composta di 4 elementi dovrei ottenere

aaaa

aaab

cccc

abcd

e cosi' via

Il numero di stringhe in output e' n^k dove n = numero di elementi nella lista e k= lunghezza della stringa

Ho visto che esiste il modulo itertools ma non mi pare contempli questo caso.

Esiste un sistema veloce?

Grazie

Marco

Ho visto che esiste il modulo itertools ma non mi pare contempli questo caso.

Ciao ... beh, forse esiste
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
import itertools
data = ['a', 'b', 'c']
result = itertools.combinations_with_replacement(data, 4)
for c in result:
    print(''.join(c))

    
aaaa
aaab
aaac
aabb
aabc
aacc
abbb
abbc
abcc
accc
bbbb
bbbc
bbcc
bccc
cccc



Leggendo meglio, forse vorresti ottenere "Tutte" le possibili combinazioni, dato che quella sopra non è completa ... in tal caso combinando con itertools.permutations e smanettando un pochino si potrebbe (occhio sono TANTE)

comp = []
result = itertools.combinations_with_replacement(data, 4)
for e in result:
    per = itertools.permutations(e)
    for c in per:
        comp.append(''.join(c))

        
final = sorted(list(set(comp)))
for v in final:
    print(v)

    
aaaa
aaab
aaac
aaba
aabb
aabc
aaca
aacb
aacc
abaa
abab
abac
abba
...
accc
baaa
baab
baac
baba
...
etc ...




--- Ultima modifica di nuzzopippo in data 2024-10-14 09:43:20 ---
Fatti non foste a viver come bruti...
Grazie :)
Funziona benissimo.
Ho rediretto l'output su un file.
Ho visto che esiste il modulo itertools ma non mi pare contempli questo caso.

Ciao ... beh, forse esiste
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
import itertools
data = ['a', 'b', 'c']
result = itertools.combinations_with_replacement(data, 4)
for c in result:
    print(''.join(c))

    
aaaa
aaab
aaac
aabb
aabc
aacc
abbb
abbc
abcc
accc
bbbb
bbbc
bbcc
bccc
cccc



Leggendo meglio, forse vorresti ottenere "Tutte" le possibili combinazioni, dato che quella sopra non è completa ... in tal caso combinando con itertools.permutations e smanettando un pochino si potrebbe (occhio sono TANTE)

comp = []
result = itertools.combinations_with_replacement(data, 4)
for e in result:
    per = itertools.permutations(e)
    for c in per:
        comp.append(''.join(c))

        
final = sorted(list(set(comp)))
for v in final:
    print(v)

    
aaaa
aaab
aaac
aaba
aabb
aabc
aaca
aacb
aacc
abaa
abab
abac
abba
...
accc
baaa
baab
baac
baba
...
etc ...




--- Ultima modifica di nuzzopippo in data 2024-10-14 09:43:20 ---


Pagina: 1



Esegui il login per scrivere una risposta.