programing

루프에 대한 단일 선 중첩

megabox 2023. 8. 22. 22:04
반응형

루프에 대한 단일 선 중첩

행렬을 전치하는 파이썬으로 이 함수를 작성했습니다.

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) ]

이 과정에서 루프에 대해 중첩된 단일 행이 어떻게 실행되는지 완전히 이해하지 못한다는 것을 깨달았습니다.다음 질문에 답변하여 이해를 도와주시기 바랍니다.

  1. 루프에 대한 이 작업이 실행되는 순서는 무엇입니까?
  2. 루프에 대한 트리플 네스트가 있으면 어떤 순서로 실행됩니까?
  3. 루프에 대해 내포되지 않은 것과 동일한 것은 무엇입니까?

정해진,

[ function(i,j) for i,j in object ]
  1. 루프 구조에 사용하려면 개체 유형이 무엇이어야 합니까?
  2. 객체의 요소에 i와 j가 할당되는 순서는 무엇입니까?
  3. 루프 구조에 대해 다른 방법으로 시뮬레이션할 수 있습니까?
  4. 루프에 대한 이것은 루프에 대한 유사한 구조 또는 다른 구조로 중첩될 수 있습니까?어떻게 보일까요?

추가 정보도 감사합니다.

최고의 정보 출처는 목록 이해에 대한 공식 파이썬 튜토리얼입니다.목록 이해는 루프의 경우와 거의 동일하지만(확실히 모든 목록 이해는 for-loop으로 작성될 수 있음) for 루프를 사용하는 것보다 종종 더 빠릅니다.

튜토리얼에서 이 더 긴 목록 이해력을 보세요.ifpart는 이해를 필터링하며, 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 루프 그 자체가 아니라 목록 이해를 사용합니다.

  1. 다음과 같습니다.

    jin 범위(0, 너비): 범위(0, 높이): m[i][j]

  2. 거의 같은 방식으로, 그것은 일반적으로 오른쪽에서 왼쪽으로 루프처럼 둥지를 짓습니다.하지만 목록 이해 구문은 더 복잡합니다.

  3. 이 질문이 무엇을 묻는 것인지 잘 모르겠습니다.


  1. 정확하게 두 개의 객체를 생성하는 반복 가능한 객체.[(1,2),'ab']입니다)

  2. 반복 시 개체가 반환되는 순서입니다.i첫 번째 수확량에 도달합니다.j2파운드

  3. 네, 하지만 그렇게 예쁘지는 않아요.기능적으로는 다음과 같습니다.

    l = list()i,jin 객체의 경우:l.sub(함수(i,j)))

    또는 지도를 더 잘 사용할 수 있습니다.

    map(function, object)
    

    하지만 당연히 기능이 필요할 것입니다.i,j자체로

  4. 이거 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

반응형