Ayuda con un código

Hola a todos espero me puedan ayudar con este problema, tengo el siguiente código:

from itertools import product

frase = {‘1’ : [’ w’, ’ x’, ’ y’, ’ z’], ‘2’ : [’ w’, ’ x’, ’ y’, ’ z’], ‘3’ : [’ w’, ’ x’, ’ y’, ’ z’]}

for c in product(*[frase[x] for x in sorted(frase.keys())]):
print(’’.join(c))

Y este es el resultado:

w w w
w w x
w w y
w w z
w x w
w x x
w x y
w x z
w y w
w y x
w y y
w y z
w z w
w z x
w z y
w z z
x w w
x w x
x w y
x w z
x x w
x x x
x x y
x x z
x y w
x y x
x y y
x y z
x z w
x z x
x z y
x z z
y w w
y w x
y w y
y w z
y x w
y x x
y x y
y x z
y y w
y y x
y y y
y y z
y z w
y z x
y z y
y z z
z w w
z w x
z w y
z w z
z x w
z x x
z x y
z x z
z y w
z y x
z y y
z y z
z z w
z z x
z z y
z z z

Quisiera que me imprima solo las que no tienen las letras repetidas, les agradecería mucho su ayuda y gracias de antemano.

Que tal en el mismo modulo

umhhh. La respuesta anterior hecha por correo no llego bien, imagino que algun problema de discourse. La mando directa desde pyar.discourse

Que tal en el mismo modulo

permutations() p[, r] r-length tuples, all possible orderings, no repeated elements
combinations() p, r r-length tuples, in sorted order, no repeated elements

Eso iria dentro del ciclo o donde lo pondria?, Es que estoy aprendiendo.

import itertools

base = [' w', ' x', ' y', ' z']
for e in itertools.permutations(base, 3):
    print(''.join(e))

Salida:

>>> 
============== RESTART: D:\dev\sequencers\shift_register4\comb.py ==============
 w x y
 w x z
 w y x
 w y z
 w z x
 w z y
 x w y
 x w z
 x y w
 x y z
 x z w
 x z y
 y w x
 y w z
 y x w
 y x z
 y z w
 y z x
 z w x
 z w y
 z x w
 z x y
 z y w
 z y x
>>> 

claro pero yo lo que quiero es crear combinaciones de 4

import itertools

frase1 = [’ w’, ’ x’, ’ y’, ’ z’, ’ w’, ’ x’, ’ y’, ’ z’]

combinations = itertools.combinations(frase1, 4)

for c in combinations:

print (c)

yo repito 2 veces las letras

y me hace las combinaciones de 4 pero igual me repite las letras, alguien me dijo una ves que usando set() se podia hacer

quiero 4

itertools.permutations(base, 3) → itertools.permutations(base, 4) ?

Tu ejemplo repite las letras porque la lista de elementos que le pasas para combinar tiene repeticiones.

Veo que ahora usas combinaciones y no permutaciones, es realmente lo que queres?

Si queres eliminar de una lista repeticiones podes convertir la lista a set, para que elimine duplicados y si precisas lista convertir el set en lista

mi_lista = [1,2,3,1,2,3]
como_conjunto = set(mi_lista)
# puedo iterar directamente sobre el conjunto
for e in como_conjunto:
    print(e)
# o puedo convertir el conjunto en lista si hiciera falta
lista_sin_duplicados = list(como_conjunto)

claro pero así no combina nada, solo muestra
1
2
3

se podrá con un condicional donde se diga que si en la lista ya esta el numero o la letra no lo coloque entonces cuando comience a combina no pone ese valor?

papu, vos tambien tenes que trabajar, sino vos no aprendes nada.

  • escribite para vos que es lo que queres hacer, en terminos de entradas y salidas, no en codigo

  • pensa que pasos intermedios podes hacer para transformar la entrada en la salida, nuevamente no en codigo, solo en palabras

  • trata de pasar cada etapa a codigo, si te trabas pedis ayuda diciendo que queres hacer, que hiciste y en donde falla.

1 me gusta

es que yo hago las combinaciones, pero se repiten las cosas y lo que no quiero es que se repitan, ahí es donde me trabó

Si no queres que se repitan no les mandes elementos repetidos. Tanto combinations como permutations asumen que los elementos que queres combinar son unicos.

En tu ultimo ejemplo ‘frase1’ tiene elementos repetidos.