Подтвердить что ты не робот

Вложенные петли, использующие понимание списков

Если бы у меня было две строки, 'abc' и 'def', я мог бы получить все их комбинации, используя два для циклов:

for j in s1:
  for k in s2:
    print(j, k)

Однако я хотел бы иметь возможность сделать это, используя понимание списка. Я пробовал много способов, но так и не смог. Кто-нибудь знает, как это сделать?

4b9b3361

Ответ 1

lst = [j + k for j in s1 for k in s2]

или

lst = [(j, k) for j in s1 for k in s2]

если вы хотите кортежи.

Как и в вопросе, for j... является внешним циклом, for k... является внутренним циклом.

По существу, вы можете иметь столько независимых предложений "для x в y", сколько хотите в понимании списка, просто придерживаясь один за другим.

Ответ 2

Так как это по существу декартово произведение, вы также можете использовать itertools.product. Я думаю, что это яснее, особенно когда у вас больше итераций ввода.

itertools.product('abc', 'def', 'ghi')

Ответ 3

Попробуйте также рекурсию:

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