먼저 리스트를 생성하는 기본 방법들을 정리해보겠다.
r1 = []
r2 = [1,2,3]
r3 = [1,2,[3,4]]
r4 = list("hello"]
r5 = list((5,6,7))
r6 = list(range(0,5))
단순 리스트는 위와 같은 방법으로 충분히 만들 수 있다. 그러나 조건이 복잡한 리스트들, 예를 들어서 아래 요구 조건의 리스트를 만들 떄는,
[1,2,3,4,5]의 모든 값을 두 배씩 증가시킨 값을 지니는 리스트를 만들어라
r1 = [1,2,3,4,5]
r2 = []
for i in r1:
r2.append(i * 2)
print(r2)
# [2, 4, 6, 8, 10]
이렇게 만들 수가 있다.
그런데 위의 코드를 다음과 같이 for loop를 사용하지 않는 형태로 대신할 수 있다. 그리고 이 것을 가리켜 리스트 컴프리헨션이라고 한다.
# 1
r1 = [1,2,3,4,5]
r2 = [i * 2 for i in r1]
print(r2)
#
[2, 4, 6, 8, 10]
# 2
r3 = [i + 10 for i in range(1, 10+1, 2)]
print(r3)
#
[11, 13, 15, 17, 19]
다음 코드를 보자. 이는 for loop를 기반으로 리스트를 생성하는 예이다. 그런데. 리스트에 담을 값을 걸러내는 조건이 존재한다.
r1 = [1,2,3,4,5]
r2 = []
for i in r1:
if i % 2:
r2.append(i * 2)
print(r2)
#
[2, 6, 10]
그런데 위의 코드는 리스트 컴프리헨션을 기반으로 다음과 같이 간단하게 작성할 수 있다.
r1 = [1,2,3,4,5]
r3 = [i * 2 for i in r1 if i % 2]
print(r3)
#
[2, 6, 10]
다음과 같이 옷의 상의와 하의의 색상 정보를 갖는 리스트가 각각 존재하는 상황에서 만들 수 있는 모든 조합의 색을 값으로 담는 리스트를 만들고자 한다.
r1 = ['black', 'white'] # 상의
r2 = ['red', 'blue', 'green'] # 하의
r3 = []
for t in r1:
for p in r2:
r3.append(t + p)
print(r3)
#
[
'blackred',
'blackblue',
'blackgreen',
'whitered',
'whiteblue',
'whitegreen'
]
r4 = [t + p for t in r1 for p in r2]
print(r4)
#
[
'blackred',
'blackblue',
'blackgreen',
'whitered',
'whiteblue',
'whitegreen'
]
예를 하나 더 들겠다. 이번에는 구구단의 모든 결과를 리스트에 담아보겠다. 즉 2단부터 9단까지 다음 내용이 리스트에 모두 담겨 다음 형태의 리스트가 만들어져야 한다.
r5 = [i * j for i in range(2, 10) for j in range(1, 10)]
print(r5)
#
[2, 4, 6, 8, 10, 12, 14, 16, 18,
3, 6, 9, 12, 15, 18, 21, 24, 27,
4, 8, 12, 16, 20, 24, 28, 32, 36,
5, 10, 15, 20, 25, 30, 35, 40, 45,
6, 12, 18, 24, 30, 36, 42, 48, 54,
7, 14, 21, 28, 35, 42, 49, 56, 63,
8, 16, 24, 32, 40, 48, 56, 64, 72,
9, 18, 27, 36, 45, 54, 63, 72, 81]
r6 = [i * j for i in range(2, 10) for j in range(1, 10) if (i * j) % 2 == 0]
print(r6)
#
[2, 4, 6, 8, 10, 12, 14, 16, 18,
6, 12, 18, 24,
4, 8, 12, 16, 20, 24, 28, 32, 36,
10, 20, 30, 40, 6, 12, 18, 24, 30,
36, 42, 48, 54, 14, 28, 42, 56,
8, 16, 24, 32, 40, 48, 56, 64, 72, 18, 36, 54, 72]