리스트 컴프리헨션의 다중 루프 리스트 컴프리헨션의 다중 루프 예제 matrix = [[1, 2, 3], [4, 5, 6]] flat = [x for row in matrix for x in row] print(flat) >>> [1, 2, 3, 4, 5, 6] 위의 예제와 동치인 일반 루프문 matrix = [[1, 2, 3], [4, 5, 6]] flat = [] for row in matrix: for x in row: flat.append(x) 입력 리스트 레이아웃을 두 레벨로 중복하여 구성 matrix = [[1, 2, 3], [4, 5, 6]] squared = [[x**2 for x in row] for row in matrix] print(squared) >>> [[1, 4, 9], [16, 25, 36]] 여러 줄 짜리 리스트 컴프리헨션 여러 줄의 리스트 컴프리헨션 예제 my_lists = [ [[1, 2, 3], [4, 5, 6]], # ... ] flat = [x for sublist1 in my_lists for sublist2 in sublist1 for x in sublist2] 위의 예제와 동치인 일반 루프문 flat = [] for sublist1 in my_lists: for sublist2 in sublist1: flat.extend(sublist2) 다중 if 조건문 포함 예제 a = [1, 2, 3, 4, 5, 6] b = [x for x in a if x > 4 if x % 2 == 0] c = [x for x in a if x > 4 and x % 2 == 0] 좀 더 복잡한 예제 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] filtered = [[x for x in row if x % 3 == 0] for row in matrix if sum(row) >= 10] print(filtered) >>> [[6], [9]] 위의 예제는 매우 복잡함 이런 식의 복잡한 리스트 컴프리헨션은 피하는 것이 좋음 가독성 문제 조건 두 개, 로프 두 개, 혹은 조건 한 개 + 루프 한 개 정도가 적당함 더 복잡해지면 헬퍼 함수 활용 (WAY 16. 리스트를 반환하는 대신 제너레이터를 고려하자)
Comments