더북(TheBook)

BETTER WAY 8
리스트 컴프리헨션에서 표현식을 두 개 넘게 쓰지 말자

 

 

리스트 컴프리헨션은 기본 사용법(Better way 7 “mapfilter 대신 리스트 컴프리헨션을 사용하자” 참고)뿐만 아니라 다중 루프도 지원한다. 예를 들어 행렬(다른 리스트를 담고 있는 리스트)을 모든 셀이 포함된 평평한 리스트 하나로 간략화한다고 가정해보자. 다음은 for 표현식 두 개를 사용한 리스트 컴프리헨션이다. 이 표현식은 왼쪽에서 오른쪽 순서로 실행된다.

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

flat = [x for row in matrix for x in row]

print(flat)

 

>>>

[1, 2, 3, 4, 5, 6, 7, 8, 9]

 

이 예에서는 간단하고 읽기 쉽고 합당한 다중 루프를 사용했다. 다중 루프의 또 다른 합당한 사용법은 입력 리스트의 레이아웃을 두 레벨로 중복해서 구성하는 것이다. 예를 들어 2차원 행렬의 각 셀에 있는 값의 제곱을 구한다고 하자. 이 표현식은 추가로 [] 문자를 사용하기 때문에 그리 좋아 보이진 않지만 그래도 이해하기는 쉽다.

squared = [[x**2 for x in row] for row in matrix]

print(squared)

 

>>>

[[1, 4, 9], [16, 25, 36], [49, 64, 81]]

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.