리스트(List)와 비슷한 컬렉션, 튜플(Tuple)
튜플은 리스트와 굉장히 비슷하다.
리스트와의 차이는 대괄호 대신 소괄호를 사용한다는 것 정도가 있다.
리스트와 같이 인덱스에 따른 순서가 있어 인덱스로 접근이 가능하고 최대값 또한 찾을 수 있다.
x = ('Glenn', 'Sally', 'Joseph')
print(x[2])
# Joseph
y = ( 1, 9, 2 )
print(y)
# (1, 9, 2)
print(max(y))
# 9
하지만 튜플은
변경이 불가능하다.
immutable, 즉 값을 변경할 수가 없다.
리스트에서는 값을 변경할 수 있다.
x = [9, 8, 7]
x[2] = 6
print(x)
# [9, 8, 6]
하지만 튜플에서는 오류가 발생한다.
이는 immutable한 속성에서 기인한다.
x = (9, 8, 7)
x[2] = 6
print(x)
# ---------------------------------------------------------------------------
# TypeError Traceback (most recent call last)
# <ipython-input-4-6136e7d6cb90> in <module>()
# 1 x = (9, 8, 7)
# ----> 2 x[2] = 6
# 3 print(x)
#
이런 변경불가능한 속성때문에 튜플은 리스트보다 더 효율적으로 동작한다.
일단 변하지 않는다는 것을 컴퓨터가 알고 있다.
따라서 굉장히 빨리 읽을 수 있고, 용량도 적게 차지한다.
변경이 가능한 리스트와 비교했을 때 장단점이 명확하다.
x = (3, 2, 1)
x.sort()
# Traceback:
# AttributeError: 'tuple' object has no attribute 'sort'
x.append(5)
# Traceback:
# AttributeError: 'tuple' object has no attribute 'append'
x.reverse()
# Traceback:
# AttributeError: 'tuple' object has no attribute 'reverse'
튜플은 진짜 변경이 안된다.
l = list()
dir(l)
# ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
t = tuple()
dir(t)
# ['count', 'index']
튜플이 쓸 수 있는 내장함수도 카운트와 인덱스밖에 없다.
카운트와 인덱스는 값을 변경하지 않아도 되는 함수이기 때문이다.
튜플의 활용
튜플에는 재밌는 기능이 있다.
좌변과 우변이 같다면 여러 변수를 튜플에 넣을 수 있다.
단 이럴 경우 좌변과 우변의 갯수는 일치해야 한다.
(x, y) = (4, 'fred')
print(y)
# fred
(a, b) = (99, 98)
print(a)
# 99
이러한 특성을 잘 활용하면 함수에서 여러개의 값을 한꺼번에 반환할 수도 있다.
def t() :
return (10, 20)
x, y = t()
print(x, y)
x = 80
print(x)
# 10 20
# 80
# 80은 그냥 넣어봤다.
이 때, 소괄호를 사용하지 않더라도 컴마로 여러 값을 나열하면 파이썬에서는 튜플로 인식하기 때문에
다음과 같이 간단하게 사용할 수 도 있다.
x, y = 1, 10
print(x, y)
# 1 10
x, y = y, x
print(x, y)
# 10 1
여러개의 값을 한번에 처리한다는 특성을 활용하여
딕셔너리를 처리하는데도 사용할 수 있다.
items 메소드를 활용해보자.
d = dict()
d['csev'] = 2
d['cwen'] = 4
for (k,v) in d.items():
print(k, v)
# csev 2
# cwen 4
tups = d.items()
print(tups)
# dict_items([('csev', 2), ('cwen', 4)])
2개의 값을 받아 하나로 묶으면서 별도의 튜플이 생성되었다.
여러 값에 대한 비교 가능
튜플은 여러 값에 대한 비교도 가능하다.
왼쪽값끼리 비교한 후 둘의 값이 다를 경우 나머지 값들을 비교하지 않고 큰지 작은지 여부를 판단한다.
왼쪽값이 동일하다면 그 다음 값을 비교하게 된다.
(왼쪽부터 오른쪽으로, or 연산과 비슷하다고 넘겨 생각하면 편하다.)
print((100, 1, 2) < (5, 1, 2))
# false.
print((0, 1, 2000000) < (0, 3, 4))
# True.
print(( 'Jones', 'Sally' ) < ('Jones', 'Sam'))
# True. l보다 m이 나중에 나옴 (큼)
'했던것들 > PY4E(모두를 위한 파이썬)' 카테고리의 다른 글
(파이썬) 튜플, 딕셔너리, 리스트를 활용한 많이 등장한 단어 Top 10 출력! (0) | 2022.05.28 |
---|---|
(파이썬) 딕셔너리를 이용한 리스트 카운팅 (0) | 2022.05.28 |
(파이썬) 딕셔너리(Dictionary) (0) | 2022.05.28 |
(파이썬) 문자열과 리스트를 활용한 값 추출하기 (0) | 2022.05.28 |
(파이썬) 리스트 활용 (몇가지 내장함수) (0) | 2022.05.28 |