가장 좋은 정보 소스는 목록 이해에 대한 공식 Python 튜토리얼입니다 . 목록 이해는 for 루프와 거의 동일하지만 (확실히 모든 목록 이해는 for 루프로 작성 될 수 있음) for 루프를 사용하는 것보다 더 빠릅니다.
튜토리얼에서이 긴 목록 이해를보십시오 ( if
부분은 이해를 필터링하고 if 문을 전달하는 부분 만 목록 이해의 마지막 부분에 전달됩니다 (여기 (x,y)
).
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
이 중첩 된 for 루프와 정확히 동일합니다 (그리고 튜토리얼에서 언급했듯이 for와 if의 순서가 동일한 지 확인).
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
목록 이해력과 for 루프 의 주요 차이점 은 for 루프의 마지막 부분 (무언가를 수행하는 곳)이 끝이 아닌 시작 부분에 있다는 것입니다.
귀하의 질문에 :
for 루프 구조를 사용하려면 어떤 유형의 객체가 있어야합니까?
반복 가능한 . (무한) 요소 집합을 생성 할 수있는 모든 개체입니다. 여기에는 컨테이너, 목록, 세트, 생성기 등이 포함됩니다.
i와 j가 object의 요소에 할당되는 순서는 무엇입니까?
중첩 된 for 루프에있는 것처럼 각 목록에서 생성 된 것과 정확히 동일한 순서로 할당됩니다 (첫 번째 이해의 경우 i에 대해 1 개의 요소를 얻은 다음 j의 모든 값, i에 대한 두 번째 요소, 그런 다음 j의 모든 값 등)
다른 for 루프 구조로 시뮬레이션 할 수 있습니까?
예, 이미 위에 표시되었습니다.
이 for 루프가 유사하거나 다른 for 루프 구조로 중첩 될 수 있습니까? 그리고 그것은 어떻게 보일까요?
물론입니다. 좋은 생각은 아닙니다. 예를 들어 다음은 문자 목록을 제공합니다.
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]