두 개의 문자열이 'abc'
있고 'def'
, 두 개의 for 루프를 사용하여 모든 조합을 얻을 수 있습니다.
for j in s1:
for k in s2:
print(j, k)
그러나 목록 이해력을 사용하여 이것을 할 수 있기를 바랍니다. 나는 여러 가지 방법을 시도했지만 그것을 얻지 못했습니다. 누구든지 이것을하는 방법을 알고 있습니까?
답변:
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...
는 내부 루프입니다.
본질적으로, 당신은 목록 이해에서 원하는만큼 독립적 인 'for x in y'절을 가질 수 있습니다.
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 를 사용할 수도 있습니다 . 특히 입력 iterable이 더 많을 때 더 명확하다고 생각합니다.
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