2016-09-12 4 views
-1

다른리스트가 들어있는 L. 이라는 목록이 있습니다. L = [A, B, C, ... N] for 루프가 필요합니다. # 2)와 같은 뭔가 : B에 대한이 L에서되지 않습니다 : Python3의 double for 루프

for A in L: #1 
    for B in L: #2 

내가 어떻게 할 수 있습니다

?

답변

0

그냥 인덱스 목록의 나머지 부분에 액세스 :

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 
+1

'xrange' 파이썬 3.'range'에 존재하지 않습니다. – Rufflewind

+0

이것은'L [1]'이'L [0]'(그 순서대로)과 쌍을 이루는 것을 막을 것입니다. 원래 루프가 두 개를 생성 할 것이기 때문에'_ [0], L [1]'을 한 쌍으로 _와 _ L [1], L [0]'쌍으로 허용하려는 OP _seems_는 생략하고 싶을 뿐이다. 'L [x], L [x]'pairings ... – ShadowRanger

0
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 등으로의 명시적인 변환이 필요합니다.

0

당신은 당신이 원하지 않는 경우를 필터링하는 if 문을 사용할 수 있습니다 :

for A in L: 
    for B in L: 
     if A == B: 
      continue # skip 
     # do stuff ... 
+0

그것은'len (L) ** 2' 번 수행 된 명시 적 비교가 필요합니다. 그리고 당신의'list'가 동종 (또는 적어도 비교할 수있는) 타입을 포함한다고 가정합니다. 그리고 L = [1, True]가 출력을 전혀 생성하지 않는 이상한 물건을 의미하는 동등한 (동일성이 아닌) 쌍은 거부되어야합니다 (명확하지 않음). L = [float ('nan')]'는 자체 출력과 쌍을 이룬 출력을 생성합니다. 다른 방법 (예 :'itertools' 메쏘드 또는 동등성 문제를 피하는 인덱스 비교, 캐싱으로 인한 정체성의 경우)을 수행 할 수 없다면이 "루프 당 테스트"를 피하는 것이 좋습니다. – ShadowRanger