본문 바로가기

Python

[Python] Data Type (list, tuple, dictionary, string)

파이썬 data type인 list, tuple, dictionary, string에 대해서 정리하려고 한다.

1. list

다른 프로그래밍 언어의 '배열(array)'과 비슷한 성질을 갖는 data type이다.

list는 쉼표로 data를 분리하여 대괄호로 묶어주어 생성할 수 있다.

a = [10, 20, 30, 40, 50]

 

이러한 list의 각각의 data를 참조하기 위해서는 data의 위치를 나타내주는 index를 사용하며 0부터 시작한다. 

파이썬에서는 마이너스(-) index를 지원하여 리스트의 마지막부터 역순으로 값을 참조할 수 있다.

(머신러닝 코드에서 slice와 함께 자주 사용된다.)

# index 0  1  2  3  4
# value 10 20 30 40 50
# index -5 -4 -3 -2 -1

 

list는 각 요소의 data type을 다르게 해서 생성할 수 있으며, list안에 또 다른 list를 포함할 수도 있다.

b = [10, 20, "Hello", [True, 3.14] ]
# index 0  1     2       3 
# value 10 20 "Hello" [True, 3.14]
# index -4 -3    -2      -1

b[-1] == b[3] == [True, 3.14]

b[3][0] == b[-1][-2] == True

b[3][1] == b[-1][-1] == 3.14

 

빈 list를 생성한 후 append 메소드를 이용하여 데이터를 추가할 수 있다.

(머신러닝 코드에서 정확도 계산, 손실함수 값 저장하기 위해 사용한다.)

 

파이선 list에는 콜론(:)을 이용한 '슬라이싱' 기능이 있다. 슬라이싱을 이용하면 범위를 지정해 부분 list를 얻을 수 있다.

(머신러닝을 위해서는 반드시 알아야 하는 기능이다.)

2. Tuple

list와 거의 비슷하지만

list는 [ ]으로 둘러싸지만 tuple은 ( )으로 둘러싼다.

list 내의 원소는 변경할 수 있지만 tuple은 변경할 수 없다.(tuple은 read-only data type이다.)

튜플을 사용하면 좋은 경우

  • 서로 다른 성질의 데이터를 묶어서 관리해야할 때
    • 최단 경로 알고리즘에서는 (비용, 노드 번호)의 형태로 튜플 자료형을 자주 사용한다.
  • 데이터의 나열을 해싱(Hashing)의 키 값으로 사용해야 할 때
    • 튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있다.
  • 리스트보다 메모리를 효율적으로 사용해야 할 때
    • iteration을 도는 속도가 리스트보다 빠르다.

3. Dictionary

다른 프로그래밍 언어의 '해시(hash)' 또는 '맵(map)'과 구조가 비슷하다.

키(key)와 값(value)을 한 쌍으로 해서 데이터를 저장한다.

purse = dict() # 또는 purse = {} 와 같이 생성할 수도 있다.
purse['money'] = 12 # 'money'라는 키에 12라는 값 연결
purse['candy'] = 3  # 'candy'라는 키에 3이라는 값 연결
purse['tissues'] = 75 # 'tissues'라는 키에 75라는 값 연결

 

purse를 실행해보면 다음과 같은 형태로 출력이 된다. 여기서는 입력한 순서대로 나오지만 항상 입력한 순서대로 출력되는 것은 아니다.

print(purse)
#{'money': 12, 'candy': 3, 'tissues': 75}

 

candy라는 키에 저장된 값에 접근하려면 다음과 같이 대괄호 안에 키를 넣어서 접근할 수 있다.

print(purse['candy'])
#3

 

접근한 내용을 업데이트할 수도 있다.

purse['candy']  = purse['candy'] + 2
print(purse)
#{'money': 12, 'candy': 5, 'tissues': 75}

 

for문을 이용해서 다음과 같이 키와 값을 모두 출력할 수 있다.

x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
for key, value in x.items():
        print(key, value)
#a 10
#b 20
#c 30
#d 40

 

딕셔너리의 key만 출력하고 싶으면 keys() 함수를 이용하면 된다.

x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
for key in x.keys():
    print(key, end=' ')
#a b c d

 

또한 values() 함수를 이용해 딕셔너리의 value만도 출력할 수 있다.

x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
for value in x.values():
    print(value, end=' ')

#10 20 30 40

get 메소드

dict.get(key, default=None)

딕셔너리의 key에 해당하는 값을 return해준다.

만약 해당 key가 딕셔너리에 없다면 default값을 반환해준다.

이때 default값을 변경해줄 수 있다.

default값을 0으로 설정: dict.get(key, default=0)

4. String

파이썬 string은 홑따옴표(' ') 또는 쌍따옴표(" ")를 사용해서 생성한다.

문자열 내의 각각의 값 또한 문자열로 인식되며, 문자열을 분리하여 list로 반환하는 split()함수는 머신러닝 코드에서 문자열 데이터 전처리(pre-process)하기 위해 자주 사용된다.

a = 'A73,CD'
print(a[1]) # '7'

a = a +, 'EFG' # + 연산자 사용
print(a) # 'A73,CD, EFG'

# split() 메서드는 특정 separator를 기준으로 문자열을 분리하여 list 리턴
b = a.split(',')
print(b) # ['A73', 'CD', ' EFG']

 

문자열도 불변한 객체여서 딕셔너리의 키 값으로 사용할 수 있다.

my_string = "Hello"
my_string[0] = "B"  # TypeError: 'str' object does not support item assignment

 

참고: https://dojang.io/mod/page/view.php?id=2308,
https://www.boostcourse.org/cs122/lecture/315114/?isDesc=false,
이것이 취업을 위한 코딩 테스트다 with 파이썬, https://www.youtube.com/watch?v=p6df7qv6jFQ&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=5
https://itholic.github.io/python-list-tuple/ ,
딕서녀리 정렬
딕셔너리 get 메소드,