Si tuviera dos cadenas 'abc'
y 'def'
, podría obtener todas las combinaciones de ellas usando dos bucles for:
for j in s1:
for k in s2:
print(j, k)
Sin embargo, me gustaría poder hacer esto usando la comprensión de listas. Lo he intentado de muchas maneras, pero nunca lo he conseguido. ¿Alguien sabe como hacer esto?
python
for-loop
list-comprehension
John Howard
fuente
fuente
L1 = [[[e1, e2, ...], ...], ...]
->[ e for L2 in L1 for L3 in L2 for e in L3 ]
for
declaraciones es el mismo que si lo hubiera escrito como dosfor
bucles en dos líneas separadas.lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]
o algo asíDado que este es esencialmente un producto cartesiano, también puede usar itertools.product . Creo que es más claro, especialmente cuando tienes más iterables de entrada.
itertools.product('abc', 'def', 'ghi')
fuente
Prueba también la recursividad:
s="" s1="abc" s2="def" def combinations(s,l): if l==0: print s else: combinations(s+s1[len(s1)-l],l-1) combinations(s+s2[len(s2)-l],l-1) combinations(s,len(s1))
Te da las 8 combinaciones:
abc abf aec aef dbc dbf dec def
fuente