Если бы у меня было две строки 'abc'
и 'def'
, я мог бы получить все их комбинации, используя два цикла for:
for j in s1:
for k in s2:
print(j, k)
Однако я хотел бы иметь возможность делать это, используя понимание списка. Я пробовал много способов, но так и не получил. Кто-нибудь знает как это сделать?
python
for-loop
list-comprehension
Джон Ховард
источник
источник
L1 = [[[e1, e2, ...], ...], ...]
->[ e for L2 in L1 for L3 in L2 for e in L3 ]
for
операторов такой же, как если бы вы написали его в виде двухfor
циклов на двух отдельных строках.lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]
или что-то в этом родеПоскольку это, по сути, декартово произведение, вы также можете использовать itertools.product . Я думаю, это яснее, особенно когда у вас больше итераций ввода.
itertools.product('abc', 'def', 'ghi')
источник
Попробуйте также рекурсию:
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))
Дает вам 8 комбинаций:
abc abf aec aef dbc dbf dec def
источник