리스트 함축과 집합의 관계
리스트 함축은 수학자들이 집합을 정의하는 것과 유사하다. 수학에서 제곱합의 집합은 아래와 같이 나타낸다.
이를 해석해보자면, x의 제곱값들이 존재하는데, 이 x값은 자연수에 속한다 라는 의미이다. 다음 식이 있다고 하자.
이를 파이썬으로 나타내면 아래와 같다.
s = [x**2 for x in range(10)]
s의 결과는 1부터 10까지의 정수값들의 제곱합이 된다. range(10)에 속하는 모든 정수에 대해 x를 제곱하여 리스트를 생성하라는 결과가 된다.
* 참고로 ∈는 영어로 표현하면 in 이다.
리스트 함축 형식
함축이라는 의미는 무엇을 함축 시켰다는 의미일까? 다음 함수를 보자.
new_list = []
for in old_list :
if filter(i) :
new_list.append(i)
위 함수를 함축시키면 다음과 같다.
[ expression for i in old_list if filter(i) ]
즉, 다음의 내용을 함축한다.
1. 새로운 리스트 생성 명령어 ( new_list = [] )
2. 새로운 리스트에 대입되는 명령어 (ex. append())
맨 처음 봤던 예시를 이용해 다시 함축시켜 보자.
함축 전)
squares = []
for x in range(10):
squares.append(x**2)
함축 후)
s = [x**2 for x in range(10)]
위 예시 내용을 쪼개어 보면 다음을 의미한다.
expression : x**2 로, 새로운 리스트에 추가될 값
for i in old_list : i 변수의 범위
if filter(i) : 선택사항으로 이 조건이 참이라 할 때, 참인 값들만 새로운 리스트 항목에 추가한다.
리스트 함축의 응용 - 상호곱(Cross product)
만약 어떤 집합에서 시행에서 일어나는 모든 경우를 모두 포함한다면 이를 표본공간이라고 부른다. 이때 전체 또는 일부를 모은 집합을 사건(event)라고 부른다.
만약 사건 A와 사건 B가 동시에 일어나는 사건이 있다고 했을 경우, 이는 곱사건(product event)라 부른다. 이 두 사건의 모든 경우의 수를 하나의 변수에 담고 싶다고 하자. 이를 일일이 타이핑 칠 것인가?
상호곱의 예시
사건 A는 색갈 : 흰색, 실버, 검정
사건 B는 차종 : 아반떼, 투싼, 넥쏘
의 곱의 사건에 해당하는 모든 경우의 수를 나타낸다면?
event_a = ['흰색', '실버', '검정']
event_b = ['아반떼', '투싼', '넥쏘']
s = [[x, y] for x in event_a for y in event_b]
### 결과
[['흰색', '아반떼'],
['흰색', '투싼'],
['흰색', '넥쏘'],
['실버', '아반떼'],
['실버', '투싼'],
['실버', '넥쏘'],
['검정', '아반떼'],
['검정', '투싼'],
['검정', '넥쏘']]
s 에 대입된 리스트 함축의 상호곱을 수식으로 다시 나타낸다면 아래와 같다.
'Python > Coding Base' 카테고리의 다른 글
16. 자료구조 - 자료구조의 이해 (0) | 2022.01.30 |
---|---|
15. 리스트(List) 4 - 다양한 리스트 알고리즘 (0) | 2022.01.30 |
13. 리스트(List) 2 - 얕은 복사, 깊은 복사 (0) | 2022.01.30 |
12. 리스트(List) 1 - 리스트와 시퀀스(sequence) (0) | 2022.01.23 |
11. 함수(function) 4 - 람다식(무명 함수), 모듈 (0) | 2022.01.23 |