루프에 대한 단일 선 중첩
행렬을 전치하는 파이썬으로 이 함수를 작성했습니다.
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) ]
이 과정에서 루프에 대해 중첩된 단일 행이 어떻게 실행되는지 완전히 이해하지 못한다는 것을 깨달았습니다.다음 질문에 답변하여 이해를 도와주시기 바랍니다.
- 루프에 대한 이 작업이 실행되는 순서는 무엇입니까?
- 루프에 대한 트리플 네스트가 있으면 어떤 순서로 실행됩니까?
- 루프에 대해 내포되지 않은 것과 동일한 것은 무엇입니까?
정해진,
[ function(i,j) for i,j in object ]
- 루프 구조에 사용하려면 개체 유형이 무엇이어야 합니까?
- 객체의 요소에 i와 j가 할당되는 순서는 무엇입니까?
- 루프 구조에 대해 다른 방법으로 시뮬레이션할 수 있습니까?
- 루프에 대한 이것은 루프에 대한 유사한 구조 또는 다른 구조로 중첩될 수 있습니까?어떻게 보일까요?
추가 정보도 감사합니다.
최고의 정보 출처는 목록 이해에 대한 공식 파이썬 튜토리얼입니다.목록 이해는 루프의 경우와 거의 동일하지만(확실히 모든 목록 이해는 for-loop으로 작성될 수 있음) for 루프를 사용하는 것보다 종종 더 빠릅니다.
튜토리얼에서 이 더 긴 목록 이해력을 보세요.if
part는 이해를 필터링하며, 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)]
루프에 대해 중첩된 것과 완전히 동일합니다(자습서에 나와 있듯이 와 의 순서가 어떻게 동일한지도 기록하십시오).
>>> 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 루프(무엇을 하는 곳)의 마지막 부분이 끝이 아니라 처음에 온다는 것입니다.
질문에 대해:
루프 구조에 사용하려면 개체 유형이 무엇이어야 합니까?
가증스러운.(유한) 요소 집합을 생성할 수 있는 모든 개체입니다.여기에는 컨테이너, 목록, 세트, 생성기 등이 포함됩니다.
객체의 요소에 i와 j가 할당되는 순서는 무엇입니까?
루프에 대해 중첩된 것처럼 각 목록에서 생성된 것과 정확히 같은 순서로 할당됩니다(첫 번째 이해를 위해 i에 대해 1개의 요소를 얻은 다음 j의 모든 값, 두 번째 요소에서 i로 모든 값, 그리고 j의 모든 값 등).
루프 구조에 대해 다른 방법으로 시뮬레이션할 수 있습니까?
예, 위에 이미 나와 있습니다.
루프에 대한 이것은 루프에 대한 유사한 구조 또는 다른 구조로 중첩될 수 있습니까?어떻게 보일까요?
물론이죠, 하지만 좋은 생각은 아닙니다.예를 들어, 다음은 캐릭터 목록입니다.
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]
통과한 모든 반복 가능한 값에서 반복 가능한 값의 튜플을 반환하는 에 관심이 있을 수 있습니다.그것은,itertools.product(A, B)
을 산출합니다.(a, b)
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 루프 그 자체가 아니라 목록 이해를 사용합니다.
다음과 같습니다.
jin 범위(0, 너비): 범위(0, 높이): m[i][j]
거의 같은 방식으로, 그것은 일반적으로 오른쪽에서 왼쪽으로 루프처럼 둥지를 짓습니다.하지만 목록 이해 구문은 더 복잡합니다.
이 질문이 무엇을 묻는 것인지 잘 모르겠습니다.
정확하게 두 개의 객체를 생성하는 반복 가능한 객체.
[(1,2),'ab']
입니다)반복 시 개체가 반환되는 순서입니다.
i
첫 번째 수확량에 도달합니다.j
2파운드네, 하지만 그렇게 예쁘지는 않아요.기능적으로는 다음과 같습니다.
l = list()i,jin 객체의 경우:l.sub(함수(i,j)))
또는 지도를 더 잘 사용할 수 있습니다.
map(function, object)
하지만 당연히 기능이 필요할 것입니다.
i
,j
자체로이거 3번이랑 같은 질문 아닌가요?
다음을 사용하여 동일한 라인의 루프에 두 개를 사용할 수 있습니다.zip
를 수행
코드:
list1 = ['Abbas', 'Ali', 'Usman']
list2 = ['Kamran', 'Asgar', 'Hamza', 'Umer']
list3 = []
for i,j in zip(list1,list2):
list3.append(i)
list3.append(j)
print(list3)
출력:
['Abbas', 'Kamran', 'Ali', 'Asgar', 'Usman', 'Hamza']
따라서 zip 기능을 사용하면 루프에 두 개를 사용하거나 두 개의 목록을 같은 행에 반복할 수 있습니다.
다음 코드는 중첩 루프에 대한 모범 사례이며, 루프에 대해 두 개를 사용하는 동안 첫 번째 루프의 출력은 두 번째 루프에 대해 입력된다는 것을 기억하십시오.중첩된 루프를 사용하는 동안 루프 종료도 중요합니다.
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
'programing' 카테고리의 다른 글
jQuery를 사용하여 텍스트 문자열을 찾으시겠습니까? (0) | 2023.08.27 |
---|---|
판다 데이터 프레임의 마지막 데이터 행을 삭제하는 방법 (0) | 2023.08.22 |
Ajax 호출을 사용하여 양식 모음을 작업으로 전달하는 방법은 무엇입니까? (0) | 2023.08.22 |
jQuery.val 변경 시 입력 값이 변경되지 않습니다. (0) | 2023.08.22 |
빠른 확장 예제 (0) | 2023.08.22 |