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 ]fordeclaraciones es el mismo que si lo hubiera escrito como dosforbucles 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 deffuente