다른리스트가 들어있는 L. 이라는 목록이 있습니다. L = [A, B, C, ... N] for 루프가 필요합니다. # 2)와 같은 뭔가 : B에 대한이 L에서되지 않습니다 : Python3의 double for 루프
for A in L: #1
for B in L: #2
내가 어떻게 할 수 있습니다
?다른리스트가 들어있는 L. 이라는 목록이 있습니다. L = [A, B, C, ... N] for 루프가 필요합니다. # 2)와 같은 뭔가 : B에 대한이 L에서되지 않습니다 : Python3의 double for 루프
for A in L: #1
for B in L: #2
내가 어떻게 할 수 있습니다
?그냥 인덱스 목록의 나머지 부분에 액세스 :
for i in xrange(len(L)-1):
for j in xrange(i+1, len(L)):
#L[i] != L[j] always, and will check just one list against the others once
itertools
, 하나
with permutations
또는
with combinations
를 사용하여
더 나은 솔루션 : 어느 이들 중 하나가 훨씬 빠르게 중첩 루프를 사용하는 것보다
import itertools
# If it's okay to see L[1], L[2], and later L[2], L[1], that is, order sensitive,
# matching your original question's specification of only avoiding pairing with self:
for A, B in itertools.permutations(L, 2):
...
# If you only want to see L[x] paired with L[y] where y > x,
# equivalent to results of Daniel Sanchez's answer:
for A, B in itertools.combinations(L, 2):
...
그 인덱싱이 필요합니다 (보너스는 코드에서 "화살표 패턴"을 줄이면 한 단계의 들여 쓰기 만 필요합니다). 루프의 몸이 print(A, B, sep=',', end=' ')
및 L = [1, 2, 3]
라면
의 permutations
루프의 출력은 다음과 같습니다
1,2 1,3 2,1 2,3 3,1 3,2
이 combinations
를 들어, 당신이 얻을 것 :
1,2 1,3 2,3
을 너무 일치 중 선택 원하는 행동. L
가 아닌 시퀀스 모음 (예 : set
) 인 경우
itertools
기능을 사용의 또 다른 이점은 잘 작동 것이다, 또는 한 번만 통과 할 수있는 반복자를 때 (그들은 캐시거야 내부적으로 값을 만들어 두 번 이상 생산할 수 있음). 다른 해결책은 "L
은 일회용 반복자"를 처리하기 위해 list
/tuple
등으로의 명시적인 변환이 필요합니다.
당신은 당신이 원하지 않는 경우를 필터링하는 if
문을 사용할 수 있습니다 :
for A in L:
for B in L:
if A == B:
continue # skip
# do stuff ...
그것은'len (L) ** 2' 번 수행 된 명시 적 비교가 필요합니다. 그리고 당신의'list'가 동종 (또는 적어도 비교할 수있는) 타입을 포함한다고 가정합니다. 그리고 L = [1, True]가 출력을 전혀 생성하지 않는 이상한 물건을 의미하는 동등한 (동일성이 아닌) 쌍은 거부되어야합니다 (명확하지 않음). L = [float ('nan')]'는 자체 출력과 쌍을 이룬 출력을 생성합니다. 다른 방법 (예 :'itertools' 메쏘드 또는 동등성 문제를 피하는 인덱스 비교, 캐싱으로 인한 정체성의 경우)을 수행 할 수 없다면이 "루프 당 테스트"를 피하는 것이 좋습니다. – ShadowRanger
'xrange' 파이썬 3.'range'에 존재하지 않습니다. – Rufflewind
이것은'L [1]'이'L [0]'(그 순서대로)과 쌍을 이루는 것을 막을 것입니다. 원래 루프가 두 개를 생성 할 것이기 때문에'_ [0], L [1]'을 한 쌍으로 _와 _ L [1], L [0]'쌍으로 허용하려는 OP _seems_는 생략하고 싶을 뿐이다. 'L [x], L [x]'pairings ... – ShadowRanger