Python

파이썬 튜플 리스트 딕셔너리

하카데미 2022. 11. 17. 13:21

파이썬의 자료형으로 크게 숫자와 문자로 이루어진다.
그리고 3가지의 형태로도 존재한다.

 

  1. 튜플
  2. 딕셔너리
  3. 리스트


처음이라 알쏭달쏭하겠지만,
초등학교 수학시간에 배우는 (소)-{중}-[대] 괄호를 떠올리면 좋겠다.
괄호의 순서대로 설명하고,
각 자료형의 형태, 특징, 관련 함수들을 소개하려고 한다.

 


튜플(Tuple)

  • 표현방식: ()
  • 형태: (1, 2, 3) 또는 ("a", "b", "c")
  • 생성방법
# 방법1
nums_tp = (1, 2, 3)

# 방법2
strs_tp = ("a", "b", "c")

# 방법3
tuple("hello")  # 결과를 꼭 확인해보길
  • 튜플만의 특징 2가지

- 한번 생성된 튜플은 추가, 수정, 값 삭제가 불가하다.
- 바뀌면 안되는 데이터는 튜플로 생성한다.

튜플에 대해 처음 배울 때 2번째 특징이 모호했다.
그래서 '잘 모르겠으니 안 써야지...'라는 생각의 흐름으로 이어졌다.
'바뀌면 안되는 데이터'라는게 도대체 뭔지 모호하지 않은가?
웹이나 앱 개발은 해본적이 없어서 모르겠지만,
머신러닝, 딥러닝 등 학습할때
데이터셋을 Train과 Test로 분리하는데
이 분리된 값들이 튜플의 형태로 존재한다.
혹은 사용자 함수를 정의한 후 리턴 부분에 여러 값을 두면,
튜플로 반환해준다.
이것이 '바뀌면 안되는, 큰일나는 자료'인 것이다.

튜플은 특별한 관련 함수가 거의 존재하지 않는다.
보통 연산하거나 조회하는 함수 정도다.
이정도만 알면 이제 어디 가서 '나 튜플 좀 안다'고 말해도 된다.(아마도)

 

 

딕셔너리(Dictionary)

  • 표현방식: {}
  • 형태: {key:value}
  • 생성방법
# 방법1
born = {'kim_yuna' : 1974, 'kim_jongwan' : 1980, 'nell' : 1999, 'jaurim' : 1997}

# 방법2
dict(kim_yuna=1974, kim_jongwan=1980, nell=1999, jaurim=1997)

# 방법3
dict(zip(['kim_yuna', 'kim_jongwan', 'nell', 'jaurim'],[1974, 1980, 1999, 1997]))

# 방법4
dict([('kim_yuna', 1974), ('kim_jongwan', 1980), ('nell', 1999), ('jaurim', 1997)])
  • 특징

- 키와 값의 형태로 있다는 점이다.
- 자료형의 이름처럼 사전의 형태인 것이 특징이다.
- 생성시 키는 중복이 불가하다.
- 순서가 없다.

# 추가
born['hacademi'] = 2022

# 조회
born['kim_yuna']
born.keys()
born.values()
born.items()

'kim_jongwan' in born
'jw' in born

# 삭제
del born['hacademi']
born.pop('jaurim')   # dict.pop(키) 
born.clear()         # dict.clear() 

#컴프리헨션(Comprehension)
{x: x**2 for x in (2, 4, 6)}

 

 


리스트(List)

  • 표현방식: []
  • 형태: [1, 2, 3] 또는 ["a", "b", "c"]
  • 생성방법
# 방법1
nums_list = [1, 2, 3]

# 방법2
strs_list = ["a", "b", "c"]

# 방법3
list("hello")   # 꼭 결과를 확인해보길
  • 특징

- 튜플과는 다르게 '수정'과 '삭제'가 가능하다.
- 인덱스를 사용해 수정할 수 있다.
- del과 인덱스를 사용해 삭제할 수 있다.

# nums_list의 2번째 값을 조회하려면
nums_list[1]
nums_list의 2번째 값을 5로 변경하려면
nums_list[1] = 5

# strs_list의 "a"를 삭제하려면
del strs_list[0]

# 삭제 후 strs_list를 부르면
print(strs_list)   # 결과: ['b', 'c']

 

삭제되면 삭제된 위치가 비워져있는게 아니라
당겨지거나 없어진다.

# 여러개를 삭제
# 리스트 생성 후 조회, 길이 조회
test_list = list('hello, hacademi')
print(test_list)
print(len(test_list))
# 콤마부터 지워지게 된다.
del test_list[5:] 
# 확인
print(test_list)

 

  • 관련 함수
# 추가
nums_list.append(5)             # list.append(값)
strs_list.insert(0, "z")        # list.insert(인덱스, 값)
nums_list.extend(strs_list)     # list.extend(iterable)

# 정렬
strs_list.sort()    # list.sort()
strs_list.reverse() # list.reverse()

# 제거
nums_list.remove(1)  # list.remove()
strs_list.pop("z")   # list.pop()
nums_list.clear()    # list.clear()
del strs_list[2]     # del list[인덱스]

# 기타
strs_list.count()    # list.count()
strs_list.copy()     # list.copy()

# 컴프리헨션(Comprehension)
comp = [x for x in range(5)]

# 컴프리헨션과 같은 결과지만 다른 방식
comp = []
for x in range(5):
    comp.append(x)

 

  • 리스트를 Stack & Queue로 사용하기
# 스택 & 큐
# 스택
stack = [3, 4, 5]
stack.append(6)
stack.append(7)
stack.pop()
stack.pop()
print(stack)

# 큐
from collections import deque
queue = deque(strs_list)
queue.append("d")
queue.append("e")
queue.popleft()
queue.popleft()
print(queue)

- Stack: last-in, first-out

- Queue: first-in, first-out

 

리스트는 last-in, first-out이다.

그래서 pop을 실행하면 가장 마지막에 생성된 요소부터 삭제하게 된다.

이런 방식을 stack이라고 한다.

리스트에서 first-in, first-out을 하려면?

collections 모듈의 deque 클래스를 사용하면 된다.

deque 중 popleft()를 사용하면 선입선출 방식으로 요소를 삭제할 수 있다.

deque 중 appendleft()가 있는데 왼쪽에 요소를 추가하게 된다.

 

* class cellections.deque 참고

https://docs.python.org/ko/3/library/collections.html#collections.deque