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

dont_stop_me·2022년 5월 14일
0

2주차

2022.05.08. ~ 2022.05.15

  • 02-3 리스트 자료형
  • 02-4 튜플 자료형
  • 02-5 딕셔너리 자료형

02-3 리스트 자료형


숫자와 문자열로는 프로그래밍을 하기 부족한 점들이 많다. 예를 들어 1부터 10까지의 숫자 중 홀수 모임인 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 = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[0] #a[0]은 a의 첫 번째 요솟값을 말한다.
1 
>>> a[0] + a[2] #1+3
4

파이썬은 숫자를 0부터 세기 때문에 a[0]이 리스트 a의 첫 번째 요소이다. a[-1]은 문자열에서와 마찬가지로 리스트 a의 마지막 요솟값을 말한다.

>>> a[1, 2, 3, ['a', 'b', 'c']]
>>> a[0]
1
>>> a[-1] #마지막 요솟값을 나타내는 것
['a', 'b', 'c']
>>> a[3] #a의 네 번째 요소를 나타내기 때문에 마지막 요소를 나타내는 a[-1]과 동일한 결괏값을 보여준다.
['a', 'b', 'c']
>>> a[-1][0] #a[-1]이 ['a','b','c'], 이 리스트에서 첫 번째 요소를 불러오기 위해 [0] 붙임.
'a'

리스트의 슬라이싱

>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1,2]
>>> b = a[:2] #처음부터 a[1]까지
[1,2]
>>> c = a[2:] #a[2]부터 마지막까지
[3, 4, 5]

리스트 연산하기 (더하기 편)

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a+b
[1, 2, 3, 4, 5, 6]

리스트 사이의 + 기호는 2개의 리스트를 합치는 기능을 한다.

리스트 연산하기 (반복하기 편)

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

리스트 길이 구하기

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

리스트의 수정과 삭제

리스트는 값을 수정하거나 삭제할 수 있다.

리스트에서 값 수정하기

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

del 함수 사용해 리스트 요소 삭제하기

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

리스트 관련 함수

리스트에 요소 추가(append)

append(x)는 리스트의 맨 마지막에 X를 추가하는 함수이다.

>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

리스트 정렬(sort)

sort함수는 리스트의 요소를 순서대로 정렬해준다.

>>> a = [1, 4, 3, 2]
>>> a.sort()
>>> a
[1, 2, 3, 4]
>>> a = ['a', 'c', 'b']
>>> a.sort() #문자 역시 알파벳 순서로 정렬할 수 있다.
>>> a
['a', 'b', 'c']

리스트 뒤집기(reverse)

reverse 함수는 리스트를 역순으로 뒤집어 준다. 이때 리스트의 요소들을 순서대로 정렬한 다음 다시 역순으로 정렬하는 것이 아니라 그저 현재의 리스트를 그대로 거꾸로 뒤집는다.

>>> a = ['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']

위치 반환(index)

index(x) 함수는 리스트에 x값이 있으면 x의 위치 값을 돌려준다.

>>> a = [1,2,3]
>>> a.index(3)
2
>>> a.index(1)
0

리스트에 요소 삽입(insert)

insert(a,b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다. 파이썬에서는 숫자를 0부터 센다는 것을 반드시 기억하자!!

>>> a = [1, 2, 3]
>>> a.insert(0, 4)
>>> a
[4, 1, 2, 3]
>>> a.insert(3, 5)
>>> a
[4, 1, 2, 5, 3]

리스트 요소 제거(remove)

remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다.

>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3) #a가 3이라는 값을 2개 가지고 있을 경우 첫 번째 3만 제거되는 것을 알 수 있다.
>>> a
[1, 2, 1, 2, 3]

리스트 요소 끄집어내기(pop)

pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.

>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]

리스트에 포함된 요소 x의 개수 세기(count)

count(x)는 리스트 안에 x가 몇 개 있는지 조사해 그 개수를 돌려주는 함수이다.

>>> a = [1,2,3,1]
>>> a.count(1)
2

리스트 확장(extend)

extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x리스트를 더하게 된다.

>>> a = [1,2,3]
>>> a.extend([4,5]) #a.extend([4, 5])는 a += [4, 5]와 동일하다.
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7]

02-4 튜플 자료형


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

  • 리스트는 []으로 둘러싸지만 튜플은 ()로 둘러싼다.
  • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.
>>> t1 = ()
>>> t2 = (1,) #1개의 요소를 가질 때는 요소 뒤 ,를 반드시 붙여야 함
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3 #괄호 생략해도 무방함
>>> t5 = ('a','b', ('ab', 'cd'))

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

튜플 다루기

인덱싱 하기

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

슬라이싱 하기

>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:] #t1[1]부터 끝까지
(2, 'a', 'b')

튜플 더하기

>>> 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

02-5. 딕셔너리 자료형


파이썬은 이러한 대응 관계를 나타낼 수 있는 자료형을 가지고 있다. 요즘 사용하는 대부분의 언어도 이러한 대응 관계를 나타내는 자료형을 갖고 있는데, 이를 연관 배열 또는 해시라고 한다. 파이썬에서는 이러한 자료형을 딕셔너리라고 하는데, 단어 그대로 해석하면 사전이라는 뜻이다. 즉 'people'이라는 단어에 '사람'이라는 뜻이 부합되듯이 딕셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다. Key가 'people'이라면 Value는 '사람'이 될 것이다.

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

Key와 Value의 쌍 여러 개가 {}로 둘러싸여 있다. 각각의 요소는 Key : Value 형태로 이루어져있고 쉼표(,)로 구분되어 있다.

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

딕셔너리 쌍 추가하기

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

딕셔너리 요소 삭제하기

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

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

>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
>>> a = {1:'a', 2:'b'}
>>> a[1] #딕셔너리 변수에서 [ ] 안의 숫자 1은 두 번째 요소를 뜻하는 것이 아니라 Key에 해당하는 1을 나타낸다.
'a'
>>> a[2]
'b'
>>> a = {'a':1, 'b':2}
>>> a['a']
1
>>> a['b']
2

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

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

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

딕셔너리 관련 함수들

Key 리스트 만들기(keys)

>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys() #a.keys()는 딕셔너리 a의 Key만을 모아서 dict_keys 객체를 돌려준다.
dict_keys(['name', 'phone', 'birth'])

Value 리스트 만들기(values)

>>> a.values() #Value만 얻고 싶다면 values 함수를 사용하면 된다. values 함수를 호출하면 dict_values 객체를 돌려준다.
dict_values(['pey', '0119993323', '1118'])

Key, Value 쌍 얻기(items)

items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.

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

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

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

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

Key로 Value얻기(get)

get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다. 앞에서 살펴보았듯이 a.get('name')은 a['name']을 사용했을 때와 동일한 결괏값을 돌려받는다.

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

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

>>> a.get('foo', 'bar') #a 딕셔너리에는 'foo'에 해당하는 값이 없다. 따라서 디폴트 값인 'bar'를 돌려준다.
'bar'

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

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False
profile
폭주벨로거,, (가 될 예정)

0개의 댓글