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.