3주차
2022.05.16. ~ 2022.05.21.
- 02-6 집합 자료형
- 02-7 불 자료형
- 02-8 자료형의 값을 저장하는 공간, 변수
집합은 파이썬 2.3부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다. 집합 자료형은 다음과 같이 set 키워드를 사용해 만들 수 있다.
>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}
위와 같이 set() 괄호 안에 리스트를 입력하여 만들거나 다음과 같이 문자열을 입력해 만들 수 있다.
>>> s2 = set("Hello")
>>> s2 =
{'e', 'H', 'l", 'o'}
리스트나 튜플은 순서가 이씩 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만, set 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다. set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후 해야 한다.
>>> s1 = set([1,2,3])
>>> l1 = list(s1) # 리스트로 변환
>>> l1
[1, 2, 3]
>>> l1[0]
1
>>> t1 = tuple(s1) # 튜플로 변환
>>> t1
(1, 2, 3)
>>> t1[0]
1
set 자료형을 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set ([4, 5, 6, 7, 8, 9])
>>> s1 & s2 # '&' 기호를 사용하면 교집합을 간단히 구할 수 있다.
{4, 5, 6}
>>> s1.intersection(s2) # intersection 함수를 사용해도 교집합을 구할 수 있다.
# s2.intersection(s1)
{4, 5, 6}
>>> s1|s2
{1, 2, 3, 4, 5, 6, 7, 8, 9} # '|' 기호를 사용하면 합집합을 구할 수 있다.
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9} # union 함수를 사용하면 된다.
#s2.union(s1)
>>> s1 - s2 # '-' 기호를 사용하면 차집합을 구할 수 있다.
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}
>>> s1.difference(s2) # difference 함수를 사용해도 차집합을 구할 수 있다.
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}
이미 만들어진 set 자료형에 값을 추가할 수 있다. 1개 값만 추가 시 다음과 같이 한다.
>>> s1 = set([1, 2, 3]
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}
여러 개의 값을 한꺼번에 추가할 때 다음과 같이 하면 된다.
>>> s1 = set([1, 2, 3])
>>> s1.update([4, 5, 6])
>>> s1
{1, 2, 3, 4, 5, 6}
특정 값을 제거하고 싶을 때는 다음과 같이 하면 된다.
>>> s1 = set([1, 2, 3])
>>> s1.remove(2)
>>> s1
{1, 3}
불 자료형이란 참과 거짓을 나타내는 자료형이다. 불 자료형은 True, False(참, 거짓)값만을 가질 수 있다. (True, False는 파이썬 예약어로 true, false와 같이 사용하지 말고 첫 문자를 항상 대문자로 사용해야 한다.)
다음과 같은 변수 a = True, 변수 b에는 False를 지정해보자.
>>> a = True
>>> b = False
따옴표로 감싸지 않은 문자열을 변수에 지정해 오류가 지정해 오류가 발생할 것 같지만 잘 실행된다. type 함수를 변수 a와 b에 사용하면 두 변수의 자료형이 bool로 지정된 것을 확인할 수 있다. (type(x)는 x의 자료형을 확인하는 파이썬의 내장 함수이다.)
>>> type(a)
<class 'bool'>
>>> type(b)
<class 'bool'>
불 자료형은 조건문의 반환 값으로도 사용된다.
>>> 1 == 1 # 1과 1이 같은가?
True
>>> 2 > 1 # 2가 1보다 큰가?
True
>>> 2 < 1 # 2가 1보다 작은가?
False
자료형에 참과 거짓이 있다. 이는 매우 중요한 특징이며 실제로도 자주 쓰인다.
자료형 | 값 | 참 OR 거짓 |
---|---|---|
문자열 | "python" | 참 |
문자열 | "" | 거짓 |
리스트 | [1,2,3] | 참 |
리스트 | [] | 거짓 |
튜플 | () | 거짓 |
딕셔너리 | {} | 거짓 |
숫자형 | 0이 아닌 숫자 | 참 |
숫자형 | 0 | 거짓 |
None | 거짓 |
문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어있으면("",[],(),{}) 거짓이 된다. 당연히 비어있지 않으면 참이 된다. 숫자에서는 그 값이 0일 때 거짓이 된다. None은 거짓을 뜻한다.
>>> a = [1, 2, 3, 4]
>>> while a: # a가 참인 동안
... a.pop() # 리스트의 마지막 요소를 하나씩 꺼낸다.
...
4
3
2
1
# a의 마지막 요소를 끄집어내는 함수이므로 리스트 안에 요소가 존재하는 한 마지막 요소를 계속해서 끄집어 낼 것이다. 결국 더 이상 끄집어낼 것이 없으면 a가 빈 리스트([])가 되어 거짓이 된다. 따라서 while 문에서 조건이 거짓이 되므로 중지된다.
bool 내장 함수를 사용하면 자료형의 참과 거짓을 식별할 수 있다.
>>> bool('python') # 'python'문자열은 빈 문자열이 아니므로 bool 연산의 결과로 불 자료형인 True를 돌려준다.
True
>>> bool('') # ''문자열은 빈 문자열이므로 bool 연산의 결과로 분 자료형인 False를 돌려준다.
False
다음 예와 같은 a, b, c를 변수라고 한다.
>>> a = 1
>>> b = "python"
>>> c = [1,2,3]
변수를 만들 때는 = 기호를 사용한다.
변수 이름 = 변수에 저장할 값
파이썬에서 사용하는 변수는 객체를 가리키는 것이라고 말할 수 있다. 객체란 우리가 지금껏 보아 온 자료형과 같은 것을 의미하는 말이다.
>>> a = [1,2,3]
[1,2,3]값을 가지는 리스트 자료형(객체)이 자동으로 메모리에 생성되고 변수 a는 [1,2,3] 리스트가 저장된 메모리의 주소를 가리키게 된다.
a 변수가 가르키는 메모리 주소는 다음과 같이 확인할 수 있다.
>>> a = [1, 2, 3]
>>> id(a) # id함수는 변수가 가리키고 있는 객체의 주소 값을 돌려주는 파이썬 내장 함수이다.
4303029896
>>> a = [1,2,3]
>>> b = a
b는 a와 완전히 동일하다. 다만 [1,2,3] 리스트를 참조하는 변수가 a변수 1개에서 b변수가 추가되어 2개로 늘어났다는 차이가 있다. 그렇다면 b변수를 생성할 때 a변수의 값을 가져오면서 a와는 다른 주소를 가리키도록 만들 수 있는 방법은 없을까? 2가지가 있다.
>>> a = [1, 2, 3]
>>> b = a[:]
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]
>>> from copy import copy
>>> a = [1, 2, 3]
>>> b = copy(a)
위 예에서 b = copy(a)는 b = a[:]과 동일하다.
>>> a, b = ('python', 'life')
튜플로 a,b에 대입할 수 있다.
>>> (a, b) = 'python', 'life'
다음처럼 리스트로 변수를 만들 수도 있다.
>>> [a,b] = ['python', 'life']
또한 여러 개의 변수에 같은 값을 대입할 수도 있다.
>>> a = b = 'python'
파이썬에서는 위 방법을 사용하여 두 변수의 값을 아주 간단히 바꿀 수 있다.
>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3
# 처음에 a에 값 3, b에는 값 5가 대입되어 있었지만 a, b = b, a 문장을 수행한 후에는 그 값이 서로 바뀌었음을 확인할 수 있다.