Python: 표현식(이해)


그것이 실제로 의미하는 바가 아닙니까?

파이썬에서 데이터 구조를 연속으로 생성할 때 사용하는 이해 함수를 정리해 보자. 사전에서 이해를 검색하면 이해라는 단어가 나타납니다. 그렇다면 이해라는 단어가 사용된 이유를 이해합니다. 이해보다는.

이해는 선언과 동시에 데이터 구조를 채우는 방법입니다. 그 경제적 힘은 코드만으로도 알 수 있습니다.

A = ()

for i in range(10):
    A.append(i)

B = (i for i in range(10))

A와 B는 같은 목록이지만 A를 만드는 데 약 3줄, B를 만드는 데 1줄이 걸립니다. 여기에 여러 조건이 요구된다면 A는 증가해야 한다. 이것만으로도 Python을 사용할 때 이해가 사용되는 이유를 설명합니다.


( <저장될 방법> for <변수명> in <순회구조> ) 형식으로 사용한다.

C = (i**2 for i in range(10))

#(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)

D = {i: i for i in range(10)}
E = {i for i in range(10)}
F = tuple(i for i in range(10))

# {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9} 
# {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

압축을 사용하는 방법. 목록에는 대괄호를 사용하고 사전에는 중괄호를 사용할 수 있으며 키:값 형식 또는 ZIP을 사용할 수 있습니다. 튜플은 괄호로 지정할 수 없으며 위와 같이 작성해야 합니다. 괄호만 사용하는 것은 나중에 자세히 설명할 생성기 이해입니다.

B = (i for i in range(10) if i % 2 == 0)

print(B) # (0, 2, 4, 6, 8)

B = (i for i in range(10) if i % 2 == 0 if i % 3 == 0)

print(B) # (0, 6)

B = (i for i in range(10) if i % 2 == 0 or i % 3 == 0)

print(B) # (0, 2, 3, 4, 6, 8, 9)

조건문을 이 양식에 작성하고 즉시 필터링하여 채울 수 있습니다. 여러 조건이 AND일 경우 and 대신 다른 if를 사용하고, OR 조건일 경우 조건문 내에서 or를 사용합니다.

A = ((j for j in range(5)) for _ in range(3))

print(A) # ((0, 1, 2, 3, 4), (0, 1, 2, 3, 4), (0, 1, 2, 3, 4))

AA = ("a", "b")
A = ((j for j in range(5)) for _ in AA)
print(A) # ((0, 1, 2, 3, 4), (0, 1, 2, 3, 4))

압축 내에서 압축을 재사용할 수 있습니다. 위의 경우 0부터 4까지의 목록을 구체적으로 참조할 필요가 없기 때문에 _를 사용했습니다. 사용법이 궁금해서 순회 구조가 range()가 아니면 어떻게 되는지 살펴보았고(보통 그렇게 사용하지 않음) 위의 예시처럼 트러스 구조의 길이만큼 자주 반복됩니다.

A = (i for i in range(3))
B = (i for i in range(3,6))

C = ((x,y) for x in A for y in B)

print(C) # ((0, 3), (0, 4), (0, 5), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5))

C = ((x, y) for x in A for y in B if x % 2 == 0 if y % 2 == 1)
print(C) # ((0, 3), (0, 5), (2, 3), (2, 5))

다중 횡단 구조를 통한 이해도 가능합니다. 위의 C를 예로 보면 for 루프와 같이 다음 반복 구조를 먼저 반복하고 다음 반복 구조를 반복하는 것을 볼 수 있으며, 물론 어떤 조건문도 작성할 수 있다.

이제 압축을 사용하여 한 번에 데이터 구조를 만들 수 있습니다!