본문 바로가기

Language/Python

<파이썬 기초> 11. 튜플

이 글은 미시건 주립대학교 찰스 교수의 MOOC강의인 Python for Everybody를 수강하고 정리하며 쓰는 글입니다.

 

 

 

 튜플은 리스트처럼 순서가 있어서 인덱스로 접근이 가능하다. max함수를 통해 최댓값을 쉽게 찾을 수도 있고 반복문도 사용하고 여러모로 편리하다. 그러나 리스트와 달리 변경이 불가능하다는 단점이 있다.

 

 하지만 튜플은 변수를 여러 개 할당가능하다는 점에서 엄청나게 편리한 기능이고, 파이썬에서는 굳이 소괄호를 쓰지 않아도 튜플로 자동으로 인식한다.

 

x, y = 1, 10
print(x, y)

# 1 10

 

 x와 y에 쉽게 값을 할당했음을 볼 수 있다. 튜플은 map함수와도 자주 어울린다.

 

x, y = map(int, input('number : ').split())
print(x+y)

# number : 
20 30
# 50

 

 input으로 받은 값은 반드시 문자열(string)에 속한다. 먼저 split을 통해 띄어쓰기를 구분하여 각각 x와 y에 할당시켰고, 계산을 위해 map함수로 모두 int값으로 변형해주었다.

 

 참고로 튜플끼리 값을 비교할 때는 왼쪽부터 비교한다. 다음은 정렬이다.

 

data = {'b':1, 'a':10, 'c':25}
print(data.items())
print(sorted(data.items()))

# dict_items([('b', 1), ('a', 10), ('c', 25)])
# [('a', 10), ('b', 1), ('c', 25)]

 

 data라는 변수에 키:값으로 이루어진 딕셔너리가 들어있다. 이를 items메소드를 사용하여 튜플로 이루어진 리스트를 만들 수 있다. 리스트가 되었기 때문에 sorted함수로 정렬도 가능하다. 보면 알겠지만 튜플은 왼쪽부터 비교하므로 키로 정렬되었음을 알 수 있다.

 

 그렇다면 값을 기준으로 내림차순 정렬을 시도해보자.

 

data = {'b':1, 'a':10, 'c':25}
tmp = list()
for k,v in data.items():
    tmp.append((v,k))
print(tmp)
tmp = sorted(tmp,reverse=True)
print(tmp)
for val, key in tmp[:2]:
    print(key, val)
    
# [(1, 'b'), (10, 'a'), (25, 'c')]
# [(25, 'c'), (10, 'a'), (1, 'b')]
# c 25
# a 10

 

 위에서 썼던 data와 같은 데이터이다. 먼저 빈 리스트를 만들고 키와 값을 반대로 할당하여 튜플로이루어진 리스트를 만들어서 출력했다. 이를 revers=True를 이용하여 내림차순으로 정렬시켰다. 즉 값을 왼쪽에 두고 역으로 정렬시킨것이다. 이것을 다시 for 루프를 통해 앞에서 2번째 까지 키와 값으로 각각 출력시켰다.

 

 하지만 위의 코드에서 첫번째 for 구문은 리스트 컴프리헨션이 가능하다. 이는 다음과 같다.

 

data = {'b':1, 'a':10, 'c':25}
print(sorted([(v,k) for k, v in data.items()],reverse=True))

# [(25, 'c'), (10, 'a'), (1, 'b')]

 

 위 단 2줄이 앞선 코드의 7줄과 같다. 리스트 컴프리헨션은 [ ] 안에 for을 넣음으로써 간결하게 리스트 형태로 표현시키는 것이다.

 

 

 

 


참고

 

 

PY4E - Python for Everybody

 

www.py4e.com

 

모두를 위한 프로그래밍 : 파이썬 강좌소개 : edwith

- 커넥트재단

www.edwith.org

 

'Language > Python' 카테고리의 다른 글

<파이썬> 리스트 컴프리헨션  (1) 2021.03.03
<파이썬 기초> 12. 정규식  (0) 2020.11.03
<파이썬 기초> 10. 딕셔너리  (0) 2020.10.20
<파이썬 기초> 09. 리스트  (0) 2020.10.13
<파이썬 기초> 08. 파일  (0) 2020.10.06