PY4E 10주차

·2025년 6월 1일

모두를 위한 파이썬

목록 보기
10/10

a. 튜플 개념 및 특징

튜플은 리스트와 매우 비슷하지만, 저장된 값을 변경할 수 없다는 점에서 큰 차이가 있다. 문자열과 비슷하게, 한 번 정의한 이후에는 수정이 불가능하다. 값을 정렬하거나, 새로운 값을 추가하거나, 순서를 거꾸로 돌리는 등 리스트에서 할 수 있는 것들 중 변경과 관련된 작업들은 전부 튜플에서 불가능하다.

>>> t = tuple()
>>> dir(t)
['count', 'index']

튜플에서는 count랑 index만 사용이 가능하다. 한마디로, 튜플은 제한이 있는 리스트이다.

수정이 되지 않는 단점에도 불구하고 튜플을 사용하는 이유는, 튜플은 리스트보다 효율적이기 때문이다. 용량도 작게 차지하고 접근도 훨씬 빠르기 때문에, 임시 변수를 선언할 때에는 리스트를 쓰는 것보다 튜플을 사용하는 것이 좋다.

튜플은 좌변에 놓는 방식으로 선언문에서 사용할 수 있다. 예를 들어,

>>> (x, y) = (4, 'fred')
>>> print(y)
fred

이 코드는 좌변의 x와 y에 각각 4와 fred의 값을 할당한다. 그러므로, 튜플을 사용하면 할당문 두 개를 하나로 줄일 수 있다. 중요한 것은, 양변의 개수가 맞아야 오류가 나지 않는다.

def t() :
    return (10, 20)
x, y = t()
print(x, y)

# 10 20

이와 같은 특성을 잘 활용하면 함수에서 여러 개의 값을 한 번에 반환할 수도 있다.

튜플은 딕셔너리와도 큰 연관이 있는데, 반복문에서 튜플을 반복 변수로 사용하여 딕셔너리의 키와 값을 받을 수도 있다.

또한, 튜플은 문자열과 똑같은 방식으로 비교가 가능한데, 왼쪽에서 오른쪽으로 방향이 흘러가며 값을 비교한다.

b. 튜플을 이용한 딕셔너리 정렬

딕셔너리를 정렬하기 위해 튜플로 이루어진 리스트를 사용할 수 있는데, items 메서드를 통해 키와 값을 얻은 후 튜플 형태로 얻은 후, 튜플로 이루어진 리스트를 sorted 메서드로 정렬하면 된다. 키를 기준으로 정렬되며, 정렬된 순서로 프린트된다.

>>> d = {'a':10, 'b':1, 'c':22}
>>> t = sorted(d.items())
>>> t
[('a', 10), ('b', 1), ('c', 22)]
>>> for k, v in sorted(d.items()):
... print(k, v)
...
a 10
b 1
c 22

딕셔너리의 키 대신 값을 기준으로 정렬하고 싶으면, 키와 값의 순서를 바꾼 튜플을 리스트에 저장하면 된다. 또한, 내림차순으로 정렬하고 싶으면 reverse=True를 sorted 메서드에 사용하면 된다.

>>> c = {'a':10, 'b':1, 'c':22}
>>> tmp = list()
>>> for k, v in c.items() :
... tmp.append( (v, k) )
...
>>> print(tmp)
[(10, 'a'), (22, 'c'), (1, 'b')]

이전까지 배운 내용을 모두 합한 코드도 만들 수 있다. 파일 열기를 통해 텍스트 파일을 오픈하고, 그 파일에서 각 줄을 단어 단위로 나눈 후, 각 단어가 몇 번씩 들어가 있는지 딕셔너리 형태로 저장한다. 딕셔너리의 키와 값의 위치를 바꾸어 리스트로 저장하고, 값을 기준으로 내림차순 정렬한 후에, 상위 10개의 딕셔너리 값만 프린트하면 가장 많이 사용된 단어 10개를 알아낼 수 있다.

fhand = open('romeo.txt')
counts = {}
for line in fhand:
    words = line.split()
    for word in words:
        counts[word] = counts.get(word, 0 ) + 1
        
lst = []
for key, val in counts.items():
    newtup = (val, key)
        lst.append(newtup)
        
lst = sorted(lst, reverse=True)

for val, key in lst[:10] :
    print(key, val)

키와 값의 위치를 바꾸어 (값, 키)의 튜플을 리스트에 저장하는 코드를 간단하게 한 줄로 작성할 수도 있다. 코드의 2행에서 대괄호의 부분은 리스트 컴프리헨션으로, 해당 부분이 리스트라고 나타내는 역할을 한다.

>>> c = {'a':10, 'b':1, 'c':22}
>>> print( sorted( [ (v,k) for k,v in c.items() ] ) )
[(1, 'b'), (10, 'a'), (22, 'c')]

실습: 튜플을 이용한 딕셔너리 정렬

파일을 연 후, 각 단어별로 몇 번씩 들어가 있는지 딕셔너리로 저장한다. 딕셔너리의 값과 키를 튜플 형태로 리스트에 저장하고, 값을 기주으로 내림차순 정렬한 후에 상위 5개의 값을 출력하는 코드를 작성하였다.

Quiz 10

튜플의 데이터형, 메소드, 코드 실행 결과에 대한 문제를 풀었다.

0개의 댓글