단일 행 중첩 For 루프
행렬을 전치하는 파이썬으로이 함수를 작성했습니다.
def transpose(m):
height = len(m)
width = len(m[0])
return [ [ m[i][j] for i in range(0, height) ] for j in range(0, width) ]
이 과정에서 단일 행 중첩 for 루프가 실행되는 방식을 완전히 이해하지 못한다는 것을 깨달았습니다. 다음 질문에 답하여 이해하도록 도와주세요.
- 이 for 루프가 실행되는 순서는 무엇입니까?
- 트리플 중첩 for 루프가 있다면 어떤 순서로 실행됩니까?
- 중첩되지 않은 동일한 for 루프와 동일한 것은 무엇입니까?
주어진,
[ function(i,j) for i,j in object ]
- for 루프 구조를 사용하려면 어떤 유형의 객체가 있어야합니까?
- i와 j가 object의 요소에 할당되는 순서는 무엇입니까?
- 다른 for 루프 구조로 시뮬레이션 할 수 있습니까?
- 이 for 루프가 유사하거나 다른 for 루프 구조로 중첩 될 수 있습니까? 그리고 그것은 어떻게 보일까요?
추가 정보도 감사합니다.
가장 좋은 정보 소스는 목록 이해에 대한 공식 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")]
itertools.product
전달하는 모든 이터 러블에서 값의 튜플을 생성하는 이터 러블을 반환하는에 관심이있을 수 있습니다 . 즉, itertools.product(A, B)
폼의 모든 값 산출 (a, b)
1, a
값이 온 A
하고 b
값을 온 B
. 예를 들면 :
import itertools
A = [50, 60, 70]
B = [0.1, 0.2, 0.3, 0.4]
print [a + b for a, b in itertools.product(A, B)]
이것은 다음을 인쇄합니다.
[50.1, 50.2, 50.3, 50.4, 60.1, 60.2, 60.3, 60.4, 70.1, 70.2, 70.3, 70.4]
전달 된 최종 인수 itertools.product
가 "내부" 인수인지 확인하십시오 . 일반적으로 다음 과 같습니다.itertools.product(a0, a1, ... an)
[(i0, i1, ... in) for in in an for in-1 in an-1 ... for i0 in a0]
우선, 첫 번째 코드는 for 루프 자체를 사용하지 않고 목록 이해력을 사용 합니다.
다음과 같을 것입니다.
범위 (0, 너비)에서 j의 경우 : 범위 (0, 높이)에서 i의 경우 : m [i] [j]
거의 같은 방식으로 일반적으로 for 루프처럼 오른쪽에서 왼쪽으로 중첩됩니다. 그러나 목록 이해 구문은 더 복잡합니다.
이 질문이 무엇을 묻는 지 잘 모르겠습니다.
Any iterable object that yields iterable objects that yield exactly two objects (what a mouthful - i.e
[(1,2),'ab']
would be valid )The order in which the object yields upon iteration.
i
goes to the first yield,j
the second.Yes, but not as pretty. I believe it is functionally equivalent to:
l = list() for i,j in object: l.append(function(i,j))
or even better use map:
map(function, object)
But of course function would have to get
i
,j
itself.Isn't this the same question as 3?
Below code for best examples for nested loops, while using two for loops please remember the output of the first loop is input for the second loop. Loop termination also important while using the nested loops
for x in range(1, 10, 1):
for y in range(1,x):
print y,
print
OutPut :
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
참고URL : https://stackoverflow.com/questions/17006641/single-line-nested-for-loops
'program story' 카테고리의 다른 글
if 절을 종료하는 방법 (0) | 2020.09.16 |
---|---|
이드의 의미는 무엇입니까? (0) | 2020.09.16 |
포인터 선언에 별표 배치 (0) | 2020.09.15 |
서버에서 SSL을 사용할 수 없습니다. (0) | 2020.09.15 |
디렉토리가 있는지 확인하고 하나의 명령으로 삭제하십시오. (0) | 2020.09.15 |