[점프 투 파이썬] 2장. 파이썬 프로그래밍의 기초, 자료형

정지나·2022년 5월 21일
0

3주차

2022.05.16. ~ 2022.05.21.

  • 02-6 집합 자료형
  • 02-7 불 자료형
  • 02-8 자료형의 값을 저장하는 공간, 변수

02-6 집합 자료형


집합은 파이썬 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}

집합 자료형 관련 함수

값 1개 추가하기(add)

이미 만들어진 set 자료형에 값을 추가할 수 있다. 1개 값만 추가 시 다음과 같이 한다.

>>> s1 = set([1, 2, 3]
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}

값 여러 개 추가하기(update)

여러 개의 값을 한꺼번에 추가할 때 다음과 같이 하면 된다.

>>> s1 = set([1, 2, 3])
>>> s1.update([4, 5, 6])
>>> s1
{1, 2, 3, 4, 5, 6}

특정 값 제거하기(remove)

특정 값을 제거하고 싶을 때는 다음과 같이 하면 된다.

>>> s1 = set([1, 2, 3])
>>> s1.remove(2)
>>> s1
{1, 3}

02-7 불 자료형


불 자료형이란 참과 거짓을 나타내는 자료형이다. 불 자료형은 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

02-8 자료형의 값을 저장하는 공간, 변수


다음 예와 같은 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가지가 있다.

  1. [:]사용
>>> a = [1, 2, 3]
>>> b = a[:]
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]
  1. copy 모듈 사용
>>> 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 문장을 수행한 후에는 그 값이 서로 바뀌었음을 확인할 수 있다.
profile
폭주벨로거,, (가 될 예정)

0개의 댓글