파이썬 리스트 컴프리헨션, 코드를 간략하고 멋지게
파이썬 리스트 컴프리헨션, 코드를 간략하고 멋지게 — #파이썬리스트컴프리헨션 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다 파이썬 ...
#파이썬리스트컴프리헨션
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
파이썬 리스트 컴프리헨션
컴프리헨션이란?
반복문이나, 조건문을 만족하는 자료구조(리스트, 딕셔너리 등)의 요소를 채워넣을 때, 컴프리헨션으로 간략하게 식을 작성할 수 있습니다.
간단하게 비유해서 원하는 조건에 해당하는 요소들을 리스트에 쉽게 담는 방법입니다.
for문 적용하기
for문 사용하기
특정 범위 안에 있는 수를 리스트에 채워넣을때는 보통 range( )와 함께 for문을 사용합니다. 아래 코드를 보겠습니다.
| test = \[\]for i in range(11): test.append(i) |
|---|
| test\[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\] |
|---|
append문을 사용하여 list에 i값을 모두 집어 넣을 수 있습니다.
위 식을 리스트 컴프리헨션으로 훨씬 간략하게 표현할 수 있습니다.
| test = \[x for x in range(11)\] |
|---|
| test\[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\] |
|---|
for문과 if문 적용하기
if문 적용하기
위 예제를 응용하여 1부터 10까지 짝수만 찾는 코드를 작성해보겠습니다.
| evens = \[\]for i in range(11): if i % 2 == 0: evens.append(i) |
|---|
| evens\[0, 2, 4, 6, 8, 10\] |
|---|
다음과 같은 다소 복잡해 보이는 식은 리스트 컴프리헨션 for과 if 사용으로 간결하게 표현이 가능합니다.
| evens = \[x for x in range(11) if x % 2 == 0\] |
|---|
for과 if의 순서에 주목하세요. 순서가 바뀌면 실행되지 않습니다.
함수(메서드) 적용하기
리스트 컴프리헨션의 첫 요소에 함수를 적용하여 요소를 채워 넣을 수 있습니다.
| def plus(x): x += 2 return xdoubles = \[plus(x) for x in range(11)\] |
|---|
| doubles\[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12\] |
|---|
0 부터 10까지의 결과가 plus() 메서드를 통과하고 반환받은(return) 값을 호출합니다.
튜플형태로 반환하기
리스트 컴프리헨션의 첫 요소에 함수가 들어간 것 처럼, 튜플도 들어갈 수 있습니다. 튜플에 대한 설명은 여기를 클릭하세요.
단, 꼭 괄호()로 묶어줍시다.
| tuples = \[(x, x\\2) for x in range(11)\] |
|---|
| tuples\[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81), (10, 100)\] |
|---|
x와 그 제곱수를 요소에 넣어주었습니다.
중첩된 리스트 컴프리헨션
위의 두 예시(메서드, 튜플)와 마찬가지로 첫 요소에 또 다른 리스트 컴프리헨션이 들어갈 수 있습니다.
| >>> matrix = \[... \[1, 2, 3, 4\],... \[5, 6, 7, 8\],... \[9, 10, 11, 12\],... \] |
|---|
행렬로 이루어진 matrix가 있다고 가정합시다. 다음 컴프리헨션은 위 행렬을 전치(transpose)시킵니다.
| \[\[row\[i\] for row in matrix\] for i in range(4)\] |
|---|
| \[ \[1, 5, 9\], \[2, 6, 10\], \[3, 7, 11\], \[4, 8, 12\] \] |
|---|
아래는 위 식의 해석입니다.
| row는 \[1, 2, 3, 4\], \[5, 6, 7, 8\], \[9, 10, 11, 12\] matrix요소의 각 리스트를 하나씩 차례로 갖습니다.i는 0, 1, 2, 3의 값을 갖습니다.i = 0일때, row = \[1, 2, 3, 4\]의 \[0\]번째 요소 1 = \[5, 6, 7, 8\]의 \[0\]번째 요소 5 = \[9, 10, 11, 12\]의 \[0\]번째 요소 9i = 1일때, row = \[1, 2, 3, 4\]의 \[1\]번째 요소 2 = \[5, 6, 7, 8\]의 \[1\]번째 요소 6 = \[9, 10, 11, 12\]의 \[1\]번째 요소 10i = 2일때,row = \[1, 2, 3, 4\]의 \[2\]번째 요소 3 = \[5, 6, 7, 8\]의 \[2\]번째 요소 7 = \[9, 10, 11, 12\]의 \[2\]번째 요소 11i = 3일때,row = \[1, 2, 3, 4\]의 \[3\]번째 요소 4 = \[5, 6, 7, 8\]의 \[3\]번째 요소 8 = \[9, 10, 11, 12\]의 \[3\]번째 요소 12 |
|---|
