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

변수는 어떻게 만들까?

우리는 앞에서 이미 변수를 사용해 왔다. 다음 예와 같은 a,b,c를 변수라고 한다.

>>> a = 1
>>> b = "python"
>>> c = [1,2,3]

변수를 만들 떄는 위 예처럼 =(assignment)기호를 사용한다.

다른 프로그래밍 언어인 C나 JAVA에서는 변수를 만들 때 자료형을 직접 지정해야 한다. 하지만 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형을 지정하기 때문에 더 편리하다.

변수 이름 = 변수에 저장할 값

변수란?

파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다. 객체란 우리가 지금껏 보아 온 자료형과 같은 것을 의미하는 말이다.

>>> a = [1, 2, 3]

만약 위코드처럼 a=[1,2,3]이라고 하면 [1,2,3]을 가지는 리스트 자료형이 자동으로 메모리에 생성되고 변수 a는 [1,2,3]리스트가 저장된 메모리의 주소를 가리키게 된다.

메모리란 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 공간.

a변수가 가리키는 메모리의 주소는 다음과 같이 확인할 수 있다.

>>> a = [1, 2, 3]
>>> id(a)
4303029896

id함수는 변수가 가리키고 있는 객체의 주소 값을 돌려주는 파이썬 내장 함수이다. 즉 여기에서 만든 변수 a가 가리키는 [1,2,3]리스트의 주소값은 4303029896임을 알수 있다.

리스트를 복사하고자 할 때

리스트 자료형에서 가장 혼동하기 쉬운 '복사'에 대해 설명하겠다. 다음 예를 통해 알아보자.

>>> a = [1,2,3]
>>> b = a

b변수에 a변수를 대입하면 어떻게 될까? b와 a는 같은 걸까? 다른걸까? 결론부터 말하면 b는 a와 완전히 동일하다고 할 수 있다.
다만 [1,2,3]리스트를 참조하는 변수가 a 변수 1개에서 b변수가 추가되어 2개로 늘어났다는 차이만 있을 뿐이다.

id함수를 사용하면 이러한 사실을 확인할 수 있다.

>>> id(a)
4303029896
>>> id(b)
4303029896

id(a)의 값이 id(b)의 값과 동일함을 확인할 수 있다. 즉 a가 가리키는 대상과 b가 가리키는 대상이 동일하다는 것을 알 수 있다.
동일한 객체를 가리키고 있는 지에 대해서 판단하는 파이썬 명령어 si를 다음과 같이 실행해도 역시 참(Ture)을 돌려준다.

>>> a is b  # a와 b가 가리키는 객체는 동일한가?
True

다음 예를 계속 수행해보자.

>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]

a리스트의 두번째 요소를 값 4로 바꾸었더니 a만 바뀌는 것이 아니라 b도 똑같이 바뀌었다. 그이유는 앞에서 살펴본 것처럼 a,b모두 동일한 리스트를 가리키고 있기 때문이다.

그렇다면 b변수를 생성할 때 a변수의 값을 가져오면서 a와는 다른 주소를 가리키도록 만들수는 없을까? 다음 2가지 방법이 있다.

1. [:]이용

첫번째 방법으로는 다음과 같이 리스트 전체를 가리키는 [:]을 사용해서 복사하는 것이다.

>>> a = [1, 2, 3]
>>> b = a[:]
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]

위 예에서 볼 수 있듯이 a 리스트 값을 바꾸더라도 b리스트에는 영향을 끼치지 않는다.

2. copy 모듈 이용

두 번째는 copy모듈을 사용하는 방법이다. 다음 예를 보면 from copy import copy라는 처음 보는 형태의 문장이 나오는데, 이것은 뒤에 설명할 파이썬 모듈 부분에서 자세히 다룬다.
여기에서는 단순히 copy함수를 쓰기 위해서 사용하는 것이라고만 알아두자.

>>> from copy import copy
>>> a = [1, 2, 3]
>>> b = copy(a)

위 예에서 b = copy(a)는 b = a[:]과 동일하다.

두 변수가 같은 값을 가지면서 다른 객체를 제대로 생성했는지 다음과 같이 확인해 보자.

>>> b is a
False

위 예에서 b is a가 False를 돌려주므로 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 문장을 수행한 후에는 그 값이 서로 바뀌었음을 확인할 수 있다.

'공부내용정리 > 파이썬' 카테고리의 다른 글

[Python] 불(Bool) 자료형  (0) 2022.12.20
[Python] 집합 자료  (0) 2022.12.19
[Python] 딕셔너리 자료형  (2) 2022.12.06
[Python] 튜플형 자료형  (0) 2022.12.06
[Python] 리스트형 자료형  (0) 2022.12.05

불 자료형

불 자료형이란?

불(bool)자료형이란 참(True)과 거짓(False)를 나타내는 자료형이다. 불 자료형은 다음 2가지 값만을 가질 수 있다.

  • True -> 참
  • False -> 거짓

다음과 같이 변수 a에는 Ture를, 변수 b에는 False를 지정해 보자.

>>> a = True
>>> b = False

따옴표로 감싸지 않은 문자열을 변수에 지정해서 오류가 발생할 것 같지만 잘 실행된다. type함수를 변수 a와 b에 사용하면 두 변수의 자료형이 bool로 지정된것을 확인할 수 있다.

>>> type(a)
<class 'bool'>
>>> type(b)
<class 'bool'>

불 자료형은 조건문의 반환 값으로도 사용된다. 조건문에 대해서는 if문에서 자세히 부이겠지만 잠시 살펴보고 넘어가자.

>>> 1 == 1
True

1 == 1 은 "1과 1이 같은가?"를 묻는 조건문이다. 이런 조건문은 결과고 True 또는 False에 해당되는 불 자료형을 돌려준다. 1과 1은 같으므로 True를 돌려준다.

>>> 2 > 1
True

2는 1보다 크기 때문에 2 > 1 조건문은 True를 돌려준다.

자료형의 참과 거짓

자료형에 참과 거짓이 있다? 조금 이상하게 들리겠지만 참과 거짓은 분명히 있다. 이는 ㅁ애ㅜ 중요한 특징이며 실제로도 자주 쓰인다.

문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면("",[],(),{})거짓이 된다. 당연히 비어있지 않으면 참이 된다. 숫자에서는 그 값이 0일떄 거짓이 된다.
None은 거짓을 뜻한다는 것만 알아두자.

다음 예를 보고 참과 거짓이 프로그램에서 어떻게 쓰이는지 간단히 알아보자.

>>> a = [1, 2, 3, 4]
>>> while a:
...     print(a.pop())
...
4
3
2
1

먼저 a= [1,2,3,4]리스트를 하나 만들었다.

while문은 03장에서 자세히 다루겠지만 간단히 알아보면 다음과 같다. 조건문이 참인 동안 조건문 안에 있는 문장을 반복해서 수행한다.

while 조건문:
  수행할 문장

즉 위 예를 보면 a가 참인 경우에 a.pop()을 계속 실행하라는 의미이다. a.pop()함수는 리스트 a의 마지막 요소를 끄집어내는 함수이므로
리스트 안에 요소가 존재하는 한(a가 참인 동안)마지막 요소를 계속해서 끄집어낼 것이다. 결국 더 이상 끄집어낼 것이 없으면 a가 빈리스트([])가 되어 거짓이 된다.
따라서 while문에서 조건이 거짓이 되므로 중지된다. 위에서 본 예는 파이썬 프로그래밍에서 매우 자주 사용하는 기법 중 하나이다.

위 예가 너무 복잡하다고 생각하는 독자는 다음 예를 보면 쉽게 이해될 것이다.

>>> if []:
...     print("참")
... else:
...     print("거짓")
...
거짓

if문에 대해서 잘 모르는 독자라도 위의 문장을 해석하는데는 무리가 없을 것이다.

[]는 앞의 표에서 볼수 있읏이 비어있는 리스트이므로 거짓이다. 따라서 "거짓"이란 문자열이 출력된다. if문에 대해서 잘 모르는 독자라도 위 문장을 해석하는데 무리가 없을 것이다.

>>> if [1, 2, 3]:
...     print("참")
... else:
...     print("거짓")
... 
참

위 코드를 해석해 해보면 다음과 같다.

만약 [1, 2, 3]이 참이면 "참"이라는 문자열을 출력하고 그렇지 않으면 "거짓"이라는 문자열을 출력하라.

위 코드의[1,2,3]은 요솟값이 있는 리스트이기 때문에 참이다. 따라서 "참"을 출력한다.

불 연산

자료형에 참과 거짓이 있음을 이미 알아보았따. bool 내장 함수를 사용하면 자료형의 참과 거짓을 식별할 수 있다.

다음 예제를 따라 해 보자.

>>> bool('python')
True

'python'문자열은 빈 문자열이 아니므로 bool연산의 결과로 불 자료형인 True를 돌려준다.

>>> bool('')
False

''문자열은 빈 문자열이므루 bool연산의 결과로 불 자료형인 False를 돌려준다.

위에서 알아본 몇가지 예제를 더 수행해 보자.

>>> bool([1,2,3])
True
>>> bool([])
False
>>> bool(0)
False
>>> bool(3)
True

위에서 알아본 것과 동일한 참과 거짓에 대한 결과를 돌려주는 것을 확인 할수 있다.

집합 자료형

집합 자료형은 어떻게 만들까?

집합(set)은 파이썬 2.3부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다.
집합 자료형은 다음과 같이 set 키워드를 사용해 만들수 있다.

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

위와 같이 set()의 괄호 안에 리스트를 입려ㅕㄱ하여 만들거나 다음과 같이 문자열을 입력하여 만들 수도 있다.

>>> s2 = set("Hello")
>>> s2
{'e', 'H', 'l', 'o'}

비어 있는 집합 자료형은 s=set()로 만들수 있다.

집합 자료형의 특징

자, 그런데 위에서 살펴본 set("Hello")의 결과가 좀 이상하지 않은가? 분명"Hello"문자열로 set 자료형을 만들었는데 생성된 자료형에는 l문자가 하나 빠져있고
숮서도 뒤죽박죽이다. 그 이유는 set에 다음과 같은 2가지 큰 특징이 있기 때문이다.

  • 중복을 혀용하지 않는다.
  • 순서가 없다(Unordered)

리스트나 튜플은 순서가 있기(ordered)때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 set 자료형은 순서가 없기(unordered)때문에 인덱싱을 값을 얻을 수 없다.
이는 마치 딕셔너리와 비슷하다. 딕셔너리 역시 순서가 없는 자료형이라 인덱싱을 지원히지 않는다.

만약 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의 특징은 자료형의 중복을 제거하기 위한 필터 역할로 종종 사용하기도 한다.

교집합, 합집합, 차집합 구하기

set 자료형을 정말 유용하게 사용하는 경우는 교집합, 합힙합, 차집합을 구할 때이다.

우선 다음과 같이 2개의 set자료형을 만든후 따라 해 보자. s1은 1부터 6까지의 값을 가지게 되었고, s2는 4부터 9까지의 값을 가지게 되었다.

>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])

1. 교집합

s1과 s2의 교집합을 구해 보자.

>>> s1 & s2
{4, 5, 6}

"&"기호를 이용하면 교집합을 간단히 구할 수 있다.

또는 다음과 같이 intersection 함수를 사용해도 동일한 결과를 돌려준다.

>>> s1.intersection(s2)
{4, 5, 6}

s2.intersection(s1)을 사용해도 결과는 같다.

2. 합집합

합집합은 다음과 같이 구할 수 있다. 이떄 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 함수를 사용하면 된다. 교집합에서 사용한 intersection 함수와 마찬가지로 s2.union(s1)을 사용해도 동일한 결과를 돌려준다.

3. 차집합

차집합은 다음과 같이 구할 수 있다.

>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}

빼기(-)기호를 사용한 방법이다.

>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}

집합 자료형 관련 함수들

값 1개 추가하기(add)

이미 만들어진 set 자료형에 값을 추가할 수 있다. 1개의 값만 추가(add)할 경우에는 다음과 같이 한다.

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

값 여러개 추가하기(update)

여러개의 값을 한꺼번에 추가(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}

딕셔너리 자료형

딕셔너리란?

사람은 누그든지 "이름" = "홍길동","생일" = "몇월 몇일" 등으로 구별할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 수 있는 자료형을 가지고 있다.
요즘 사용하는 대부분의 언어도 이러한 대응 관계를 나타내는 자료혀을 갖고 있는데, 이를 연관 배열(Associative array)또는 해시(Hash)라고 한다.

파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 하는데, 단어 그대로 해석하면 사전이라는 뜻이다. 즉"peeople"이라는 단어에 "사람", "baseball"이라는 단어에 "야구"라는
뜻이 부합되듣시 댁셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다. 예컨대 Key가 "baseball"이라면 Value는 "야구"가 될 것이다.

딕셔너리는 리스트나 튜플처럼 순차적으로 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다. 이것이 바로 딕셔너리의 가장 큰 특징이다. baseball이라는 단어의 뜻을 찾기위해
사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.

딕셔너리는 어떻게 만들까?

다음은 기본 딕셔너리의 모습이다.

{Key1:Value1, Key2:Value2, Key3:Value3, ...}

Key와 Value의 쌍 여러개가 {}로 둘려싸여 있다. 각각의 요소는 Key:Value형태로 이루어져있고 쉼표(,)로 구분되어 있다.
Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.
다음 딕셔너리 에를 살펴보자

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

위에서 Key는 각각'name','phone','birth'이고, 각각의 Key에 해당하는 Value는 'pey','0119993323','1118'이 된다.

다음 예는 Key로 정수 값 1, Value로 문자열 'hi'를 사용한 예이다.

>>> a = {1: 'hi'}

또한 다음 예처럼 Value에 리스트도 넣을 수 있다.

>>> a = { 'a': [1,2,3]}

딕셔너리 쌍 추가, 삭제하기

딕셔너리 쌍을 추가하는 방법과 삭제하는 방법을 살펴보자. 먼저 딕셔너리에 쌍을 추가하는 다음 예를 함께 따라 해 보자.

딕셔너리 쌍 추가하기

>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{1: 'a', 2: 'b'}

{1: 'a'} 딕셔너리에 a[2] = 'b'와 같이 입력하면 딕셔너리 a에 Key와 Value가 각각 2와 'b'인 2 : 'b'라는 딕셔너리 쌍이 추가된다.

>>> a['name'] = 'pey'
>>> a
{1: 'a', 2: 'b', 'name': 'pey'}

딕셔너리 a에 'name': 'pey'라는 쌍이 추가되었다.

>>> a[3] = [1,2,3]
>>> a
{1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}

Key는 3, Value는 [1, 2, 3]을 가지는 한 쌍이 또 추가되었다.

딕셔너리 요소 삭제하기

>>> del a[1]
>>> a
{2: 'b', 'name': 'pey', 3: [1, 2, 3]}

위 예제는 딕셔너리 요소를 지우는 방법을 봉준다. del함수를 사용해서 del a[key]처럼 입력하면 지정한 Key에 해당하는 {key: Value} 쌍이 삭제된다.

딕셔너리를 사용하는 방법

"딕셔너리는 주로 어떤 것을 표현하는ㄷ 사용할까?"라는 의문이 들 것이다. 예를 들어 4명의 사람이 있다고 가정하고, 각자의 특기를 표현할 수있는 좋은 밥업에 대해서 생각해 보자.
리스트나 문자열로는 표현하기가 상당히 까다로울 것이다. 하지만 파이썬의 딕셔너리를 사용한다면 이 상황을 표현하기가 정말 쉽다. 다음 예를 보자.

{"김연아":"피겨스케이팅", "류현진":"야구", "박지성":"축구", "귀도":"파이썬"}

사람 이름과 특기를 한 쌍으로 하는 딕셔너리이다. 정말 간편하지 않은가?

지금껏 우리는 딕셔너리를 만드는 방법에 대해서만 살펴 보았는데 딕셔너리를 제대로 활용하기 위해서는 알아야 할 것이 더있다.

딕셔너리에서 Key사용해 Value 얻기

다음 예를 살펴 보자.

>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99

리스트나 튜플, 문자열은 오솟값을 얻고자 할 때 인덱싱이나 슬라이싱 기법 중 하나를 사용했다. 하지만 딕셔너리는 단 한 가지 방법뿐이다. 바로 Key를 사용해서 Value를 구하는 방법이다. 위에서 'pey'라는 Key의 Value를 얻기 위해 grade["pey"]를 사용한 것처럼 어떤 Key의 Value를 얻기 위해서는 딕셔너리변수이름[Key]를 사용한다.

몇가지 예를 더보자.

>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a[2]
'b'

먼저 a 변수에 {1:'a', 2:'b'} 딕셔너리를 대입하였다. 위 예에서 볼 수 있듯이 a[1]은 'a' 값을 돌려준다. 여기에서 a[1]이 의미하는 것은 리스트나 튜플의 a[1]과는 전혀 다르다.
딕셔너리 변수에서 []안의 숫자 1은 두번째 요소를 뜻하는 것이 아니라 Key에 해당하는 1을 나탙낸다. 앞에서도 말했듯이 딕셔너리는 리스트나 튜플에 있는 인덱싱 방법을 적용할 수 없다.
따라서 a[1]은 딕셔너리 {1:'a', 2:'b'}에서 Key가 1인 것의 Value인 'a'를 돌려주게 된다. a[2] 역시 마찬가지이다.

이번에는 a라는 변수에 앞의 예에서 사용한 딕셔너리의 Key와 Value를 뒤집어 놓은 딕셔너리를 대입해 보자.

>>> a = {'a':1, 'b':2}
>>> a['a']
1
>>> a['b']
2

역시 a['a'], a['b']처럼 Key를 사용해서 Value를 얻을 수 있다. 정리하면, 딕셔너리 a는 a[Key]로 입력해서 Key에 해당하는 Value를 얻는다.

다음 예는 이전에 한 번 언급한 딕셔너리인데 Key를 사용해서 Value를 얻는 방법을 잘 보여 준다.

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> dic['name']
'pey'
>>> dic['phone']
'0119993323'
>>> dic['birth']
'1118'

딕셔너리 만들 떄 주의할 사항

먼저 딕셔너리에서 Key는 고유한 값이므로 중복되는 Key값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점을 주의해야 한다. 다음 예에서 볼 수 있듯이 동일한 Key가
2개 존재할 경우 1:'a'쌍이 무시된다.

>>> a = {1:'a', 1:'b'}
>>> a
{1: 'b'}

이렇게 Key가 중복되었을 떄 1개를 제외한 나머지 Key:Value값이 모두 무시되는 이유는 Key를 통해서 Value를 얻는 딕셔너리의 특징에서 비롯된다. 즉 동일한 Key가 존재하면
어떤 Key에 해당하는 Value를 불러야 할지 알 수 없기 떄문이다.

또 한 가지 주의해야 할 사하은 Key에 리스트는 쓸 수 없다는 것.하지만 튜플은 Key로 쓸수 있다. 딕셔너리의 Key로 쓸 수 있느냐 없느냐는 Key가 변하는 값인지 변하지 않는 값인지에
달려있다. 리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없다. 다음 예처럼 리스트를 Key로 설정하면 리스트를 키 값으로 사용할수 없다는 오류가 발생한다.

>>> a = {[1,2] : 'hi'}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

따라서 딕셔너리의 Key값으로 딕셔너리를 사용할 수 없음은 당연하다. 단 Value에는 변하는 값이든 변하지 않는 값이든 상관없이 아무 값이나 넣을 수 있다.

Key리스트 만들기(keys)

>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])

a.keys()는 딕셔너리 a의 Key만을 모아서 dict_keys 객체를 돌려준다.
dict_keys 객체는 다음과 같이 사용할 수 있다. 리스트를 사용하는 것과 차이가 없지만, 리스트 고유의 append,insert,pop, remove,sork 함수는 수행할수 없다.

>>> for k in a.keys():
...    print(k)
...
name
phone
birth

dict_keys 객체를 리스트로 변환하려면 다음과 같이 하면 된다.

>>> list(a.keys())
['name', 'phone', 'birth']

Value 리스트 만들기(values)

>>> a.values()
dict_values(['pey', '0119993323', '1118'])

Key를 얻는 것과 마찬가지 방법으로 Value만 얻고 싶다면 values 함수를 사용하면 된다. values 함수를 호출하면 dict_values객체를 돌려준다.

Key, Value 쌍 얻기(items)

>>> a.items()
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])

items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다. dict_values 객체와 dict_items 객체 역시 dict_keys 객체와 마찬가지로 리스트를 사용하는 것과 동일하게 사용할 수 있다.

Key:Value 쌍 모두 지우기(clear)

>>> a.clear()
>>> a
{}

clear 함수는 딕셔너리 안의 모든 요소를 삭제한다. 빈 리스트를 [ ], 빈 튜플을 ( )로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현한다.

Key로 Value 얻기(get)

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'0119993323'

get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다. 앞에서 살펴보았듯이 a.get('name')은 a['name']을 사용했을 때와 동일한 결괏값을 돌려받는다.
다만 다음 예제에서 볼 수 있듯이 a['nokey']처럼 존재하지 않는 키(nokey)로 값을 가져오려고 할 경우 a['nokey']는 Key 오류를 발생시키고 a.get('nokey')는
None을 돌려준다는 차이가 있다. 어떤것을 사용할지는 여러분의 선택이다.

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> print(a.get('nokey'))
None
>>> print(a['nokey'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'nokey'

딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 편리하다.

>>> a.get('foo', 'bar')
'bar'

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False

'name' 문자열은 a 딕셔너리의 Key 중 하나이다. 따라서 'name' in a를 호출하면 참(True)을 돌려준다. 반대로 'email'은 a 딕셔너리 안에 존재하지 않는 Key이므로 거짓(False)을 돌려준다.

'공부내용정리 > 파이썬' 카테고리의 다른 글

[Python] 불(Bool) 자료형  (0) 2022.12.20
[Python] 집합 자료  (0) 2022.12.19
[Python] 튜플형 자료형  (0) 2022.12.06
[Python] 리스트형 자료형  (0) 2022.12.05
[Python] 문자열 자료형  (0) 2022.12.05

튜플 자료형

튜플은 어떻게 만들까?

튜플은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 접은 다음과 같다.

  • 리스트는 []로 둘러싸지만 튜플은 ()으로 둘러싼다
  • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀수 없다.

튜플의 모습은 다음과 같다.

>>> t1 = ()
>>> t2 = (1,)
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3
>>> t5 = ('a', 'b', ('ab', 'cd'))

리스트와 모습은 거의 비슷하지만 튜플에서는 리스트와 다른 2가지 차이점을 찾아볼 수 있다. t2 = (1,)처럼 단지 1개의 요소만을 가질 때는 요소 뒤에 콤마(,)를 반드시 붙여야 한다는 것과
t4 = 1, 2, 3처럼 괄호를 생략해도 무방함.

얼핏보면 튜플과 리스트는 비슷한 역할을 하지만 프로그래밍을 할 떄 튜플과 리스트는 구별해서 사용하는 것이 유리하다. 튜플과 리스트는 구별해서 사용하는 것이 유리하다. 튜플과 리스트의
가장 큰 차이는 값을 변화시킬 수 있는가 여부이다. 즉 리스트의 항복 값은 변화가 가능하고 튜플의 항목 값은 변화가 불가능. 따라서 프로그램이 실행되는 동안 그 값이 항상 변하지 않기를
바란다거나 값이 바뀔까 걱정하고 싶지 않다면 주저하지 말고 튜플을 사용해야 한다. 이와는 반대로 수시로 그 값을 변화시켜야할 경우라면 리스트를 사용해야 한다. 실제 프로그램에서는
값이 변경되는 형태의 변수가 훨씬 많기 때문에 평균적으로 튜플보다는 리스트를 더 많이 사용한다.

튜플의 요소값을 지우거나 변경하려고 하면 어떻게 될까?

앞에서 설명했듯이 튜플의 요솟값은 한 번 정하면 지우간 변겨할수 없다. 다음에 소개하는 두 예를 살펴보면 무슨 말인지 알 수 있을 것이다.

1. 튜플 요솟값을 삭제하려 할 때

>>> t1 = (1, 2, 'a', 'b')
>>> del t1[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion

튜플의 요소를 리스트처럼 del 함수로 지우려고 한 예이다. 튜플은 요소를 지우는 행위가 지원되지 않는다는 메시지를 확인 할수 있다.

2. 튜플 요솟값을 변경하려 할 때

>>> t1 = (1, 2, 'a', 'b')
>>> t1[0] = 'c'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

튜플의 요솟값을 변경하려고 해도 마찬가지로 오류가 발생하는 것을 확인할 수 있다.

튜플 다루기

튜플은 값을 변화시킬 수 없다는 점만 제외하면 리스트와 완전히 동일하므로 간단하게만 살펴보겠다. 다음 예제는 서로 연관되어 있으므로 차례대로 수행해 보기 바란다.

인덱싱하기

>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
>>> t1[3]
'b'

문자열, 리스트와 마찬가지로 t1[0],t1[3]처럼 인덱싱이 가능하다.

슬라이싱하기

>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:]
(2, 'a', 'b')

t1[1]부터 튜플의 마지막 요소까지 슬라이싱하는 예이다.

튜플 더하기

>>> t1 = (1, 2, 'a', 'b')
>>> t2 = (3, 4)
>>> t1 + t2
(1, 2, 'a', 'b', 3, 4)

튜플을 더하는 방법을 보여 주는 예이다.

튜플 곱하기

>>> t2 = (3, 4)
>>> t2 * 3
(3, 4, 3, 4, 3, 4)

튜플의 곱하기(반복)예를 보여준다.

튜플 길이 구하기

>>> t1 = (1, 2, 'a', 'b')
>>> len(t1)
4

튜플의 길이를 구하는 예.

'공부내용정리 > 파이썬' 카테고리의 다른 글

[Python] 불(Bool) 자료형  (0) 2022.12.20
[Python] 집합 자료  (0) 2022.12.19
[Python] 딕셔너리 자료형  (2) 2022.12.06
[Python] 리스트형 자료형  (0) 2022.12.05
[Python] 문자열 자료형  (0) 2022.12.05

리스트 자료형

리스트는 어떻게 만들고 사용할까?

리스트를 사용하면 1,3,5,7,9 숫자 모음을 다음과 같이 간단하게 표현할 수 있다.

>>> odd = [1, 3, 5, 7, 9]

리스트를 만들 때는 위에서 보는 것과 같이 대괄호([])로 감싸 주고 각 요솟값은 쉼표(,)로 구분해 준다.

리스트명 = [요소1, 요소2, 요소3, ...]

여러 가지 리스트의 생김새를 살펴보면 다음과 같다.

>>> a = []
>>> b = [1, 2, 3]
>>> c = ['Life', 'is', 'too', 'short']
>>> d = [1, 2, 'Life', 'is']
>>> e = [1, 2, ['Life', 'is']]

리스트는 a처럼 아무것도 포함하지 않아 비어 있는 리스트([ ])일 수도 있고 b처럼 숫자를 요솟값으로 가질 수도 있고 c처럼 문자열을 요솟값으로 가질 수도 있다. 또한 d처럼 숫자와 문자열을 함께 요솟값으로 가질 수도 있으며 e처럼 리스트 자체를 요솟값으로 가질 수도 있다. 즉 리스트 안에는 어떠한 자료형도 포함시킬 수 있다.
비어있는 리스트는 a = list()로 생성할수 있다.

리스트의 인덱싱과 슬라이싱

리스트도 문자열 처럼 인덱싱과 슬라이싱이 가능하다.

리스트의 인덱싱

리스트 역시 문자열처럼 인덱싱을 적용가능. 먼저 a 변수에 [1,2,3]값을 설정

>>> a = [1, 2, 3]
>>> a
[1, 2, 3]

a[0]은 리스트 a의 첫번째 요솟값을 말한다.

>>> a[0]
1

다음 예를 따라 해보자

>>> a[0]
1
>>> a[-1]
['a', 'b', 'c']
>>> a[3]
['a', 'b', 'c']

예상한 대로 a[-1]은 마지막 요솟값['a'.'b','c']를 나타낸다. a[3]은 리스트 a의 네번째 요소를 나타내기 때문에 마지막 요소를 나타내는 a[-1]과 동일한 결과값을 보여준다.

그렇다면 여기서 리스트 ['a', 'b', 'c'] 리스트에서 'a' 값을 인덱싱을 사용해 끄집어낼 수 있는 방법은 없을까? 다음 예를 보자.

>>> a[-1][0]
'a'

위와 같이 하면 'a'를 끄집어낼 수 있다. a[-1]이 ['a', 'b', 'c'] 리스트라는 것은 이미 말했다. 바로 이 리스트에서 첫 번째 요소를 불러오기 위해 [0]을 붙여 준 것이다.
다음 예도 마찬가지 경우이므로 어렵지 않게 이해될 것이다.

>>> a[-1][1]
'b'
>>> a[-1][2]
'c'

'공부내용정리 > 파이썬' 카테고리의 다른 글

[Python] 불(Bool) 자료형  (0) 2022.12.20
[Python] 집합 자료  (0) 2022.12.19
[Python] 딕셔너리 자료형  (2) 2022.12.06
[Python] 튜플형 자료형  (0) 2022.12.06
[Python] 문자열 자료형  (0) 2022.12.05

문자열 자료형

문자열이란?

문자열(String)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 것들이 문자 열이다.

"Life is too short, you need Python"
"a"
"123

위 문자열 예문을 보면 모두 큰따옴표("")로 둘려 싸여 있따. "123은 숫자인데 왜 문자열이지?"라는 의문이 드는 사람도 있을 것이다. 따옴표로 둘러싸여 있으면 모두 문자열이라고 보면 된다.

문자열은 어떻게 만들고 사용할까?

위 예에서는 문자열을 만들 때 큰따옴표(" ")만을 사용했지만 이 외에도 문자열을 만드는 방법은 3가지가 더 있다. 파이썬에서 문자열을 만드는 방법은 총 4가지이다.

  1. 큰따옴표(")로 양쪽 둘러싸기
    "Hello World"
  2. 작은따옴표(')로 양쪽 둘러 싸기
    'python is fun'
  3. 큰따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기
    """Life is too short, You need python"""
  4. 작은따옴표 3개를 연속(''')으로 써서 양쪽 둘러싸기
    '''Lift is too short, You need python'''
    단순함이 자랑인 파이썬이 문자열을 만드는 방법은 왜 4가지나 가지게 되었을까? 그 이유에 대해 알아보자.

    문자열 안에 작은 따옴표나 큰따옴표를 포함시키고 싶을떄

    문자열을 만들어 주는 주인공은 작은따롬표(')와 큰따옴표(")이다, 그런데 문자열 안에도 작은 따옴표와 큰따옴표가 들어있어야할 경우가 있따. 이떄는 좀더 특별한 기술이 필요하다.
    예제를 하나씩 살펴보며 원리를 익혀 보자.
    1. 문자열에 작은 따옴표(')포함하기
    Python's favorite food is perl
    위와 같은 문자열을 food 변수에 저장하고 싶다고 가정하자. 문자열 중 Pytho's에 작은따옴표(')가 포함되어 있다.
    이럴떄는 다음과 같이 문자열을 큰따옴표(")로 둘러싸야한다. 큰따옴표 안에 들어있는 작은 따옴표는 문자열을 나타내기 위한 기호로 인식되지 않는다.
    >>> food = "Python's favorite food is perl"
    프롬프트에 food 를 입력해서 결과를 확인하자. 변수에 저장된 문자열이 그대로 출력되는 것을 볼수 있다.
    >>> food
    "Pythonn's favorite food is perl"
    큰따옴표가 아닌 작은 따옴표로 문자열을 둘러싼후 다시 실행해보면 SyntaxError가 발생할 것이다.

문자열 관련 함수들

문자열 자료형은 자체적으로 함수를 가지고 있다. 이들 함수를 다른 말로 문자열 내장 함수라 한다. 이 내장 함수를 사용하려면 문자열 변수 이름 뒤에 '.'를 쿹인 다음에 함수 이름을 써주면 된다. 이제 문자열의 내장 함수에 대해 알아보자

문자 개수 세기(count)

>>> a = "hobby"
>>> a.count('b')
2

문자열 중 문자 b의 개수를 리턴

위치 알려주기1(find)

>>> a = "Python is the best choice"
>>> a.find('b')
14
>>> a.find('k')
-1

문자열 중 문자 b가 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환.

위치 알려주기2(index)

>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found

문자열 중 문자 t가 맨 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 오류를 발생시킨다. 앞의 find함수와 다른 점은 문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다는 점이다.

문자열 삽입(join)

>>> ",".join('abcd')
'a,b,c,d'

abcd 문자열의 각각의 문자 사이에 ','을 삽입한다.

join 함수는 문자열뿐만 아니라 앞으로 배울 리스트나 튜플도 입력으로 사용할 수 있다. join함수의 입력으로 리스트를 사용하는 예는 다음과 같다.

>>> ",".join(['a', 'b', 'c', 'd'])
'a,b,c,d'

소문자를 대문자로 바꾸기(upper)

>>> a = "hi"
>>> a.upper()
'HI'

upper 함수는 소문자를 대문자로 바꾸어 준다. 만약 문자열이 이미 대문자라면 아무 변화도 일어니 않을 것이다.

대문자를 소문자로 바꾸기(lower)

>>> a = "HI"
>>> a.lower()
'hi'

lower함수는 대문자를 소문자로 바꾸어 준다.

왼쪽 공백 지우기(lstrip)

>>> a = " hi "
>>> a.lstrip()
'hi '

문자열중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다. lstrip에서 l은 left

오른쪽 공백 지우기(rstrip)

>>> a= " hi "
>>> a.rstrip()
' hi'

문자열 중 가장 오른쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다. rstrip에서 r은 right

양쪽 공백지우기(strip)

>>> a = " hi "
>>> a.strip()
'hi'

문자열 양쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다.

문자열 바꾸기(replace)

>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'

replace(바뀌게될 문자열, 바꿀 문자열)처럼 사용해서 문자열 안의 특정한 값을 다른 값으로 치환해 준다.

문자열 나누기(split)

>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']

split 함수는 a.split()처럼 괄호 안에 아무 값도 넣어 주지 않으면 공백(스페이스,탭,엔터)을 기준으로 문자열을 나누어 준다.
만약 b.split(':')처럼 괄호 안에 특정 값이 있을 경우에는 괄호 안의 값을 구분자로 해서 문자열을 나누어 준다. 이렇게 나눈 값은 리스트에 하나씩 들어가게 된다.

'공부내용정리 > 파이썬' 카테고리의 다른 글

[Python] 불(Bool) 자료형  (0) 2022.12.20
[Python] 집합 자료  (0) 2022.12.19
[Python] 딕셔너리 자료형  (2) 2022.12.06
[Python] 튜플형 자료형  (0) 2022.12.06
[Python] 리스트형 자료형  (0) 2022.12.05

+ Recent posts