Se eu tivesse duas strings 'abc'
e 'def'
, poderia obter todas as combinações delas usando dois loops for:
for j in s1:
for k in s2:
print(j, k)
No entanto, gostaria de poder fazer isso usando a compreensão de lista. Já tentei de várias maneiras, mas nunca consegui. Alguém sabe como fazer isso?
python
for-loop
list-comprehension
John Howard
fonte
fonte
L1 = [[[e1, e2, ...], ...], ...]
->[ e for L2 in L1 for L3 in L2 for e in L3 ]
for
instruções é a mesma como se você as tivesse escrito como doisfor
loops em duas linhas separadas.lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]
ou algo assimComo este é um produto essencialmente cartesiano, você também pode usar itertools.product . Acho que é mais claro, especialmente quando você tem mais iteráveis de entrada.
itertools.product('abc', 'def', 'ghi')
fonte
Tente recursão também:
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))
Dá a você as 8 combinações:
abc abf aec aef dbc dbf dec def
fonte