'Better way 28. 컴프리헨션 내부에 제어 하위 식을 세 개 이상 사용하지 말라' 정리

Effective Python 2nd 파이썬 코딩의 기술 (교보문고 링크)을 제대로 이해하고자 블로그에 정리합니다.



현재 위치

Note
<4. Comprehensions and Generators>
Item 28: Avoid More Than Two Control Subexpressions in Comprehensions
Better way 28. 컴프리헨션 내부에 제어 하위 식을 세 개 이상 사용하지 말라



리스트 컴프리헨션은 간단하게만 씁시다. (리스트 컴프리헨션 참고)



# Example 1 (요정도는 괜찮지만)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for row in matrix for x in row]  # for 루프 중첩 가능 (matrix 의 row, 고 row 안의 x 이용)
print(flat)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

my_lists = [
    [[1, 2, 3], [4, 5, 6]],
    [[7, 8, 9], [10, 11, 12]],
]

# Example 4 (복잡한건 그냥 이렇게 풀어 쓰자)
flat = []
for sublist1 in my_lists:
    for sublist2 in sublist1:
        flat.extend(sublist2)
print(flat)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

# Example 3 (너무 이해하기 어려움!)
flat = [x for sublist1 in my_lists
        for sublist2 in sublist1
        for x in sublist2]
print(flat)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]


책에서 챕터 마지막 부분에 적혀있는 내용입니다.

Tip
Comprehensions support multiple levels of loops and multiple conditions per loop level.
컴프리헨션은 여러 수준의 루프를 지원하며 각 수준마다 여러 조건을 지원한다.
Tip
Comprehensions with more than two control subexpressions are very difficult to read and should be avoided.
제어 하위 식이 세 개 이상인 컴프리헨션은 이해하기 매우 어려우므로 가능하면 피해야 한다.




Related Content