파이썬 기초편(1) - 튜플(tuple)과 레인지(range) 본문
● 튜플 (tuple)
tp1 = (1, 2, 3)
type(tp1) # <class 'tuple'>
> 리스트는 [ . . . ]으로 표현하지만 튜플은 ( . . . )으로 표현한다
> 튜플 역시 리스트와 마찬가지로 파이썬이 인식하는 데이터의 한 종류이다
> 튜플 역시 리스트와 마찬가지로 하나 이상의 값을 묶는 용도로 사용된다
두 타입의 차이는 저장된 값을 수정할 수 있느냐 없느냐이다. 리스트는 값을 수정할 수 있지만 튜플은 값을 추가하거나 수정할 수 없다. 문자열처럼. 만약 수정하려고 하면 오류가 발생한다.
● 튜플을 어디다 쓸 것인가?
리스트에 값을 담아둘 수 있으니 튜플은 필요없을 것 같지만 리스트는 값을 추가하거나 수정을 할 수 있어 저장된 데이터가 누군가의 실수로 언제든지 바뀔 수 있다. 그래서 튜플로 묶어 코드에 안전성을 부여하는 것이 좋다. 튜플은 수정할 수 없는 데이터 타입이기 때문이다.
● 튜플 관련 함수와 연산들
len(s) # 튜플 s의 길이(s에 저장된 값의 개수) 반환
min(s) # 튜플 s에 저장된 값 중 가장 작은 값 반환
max(s) # 튜플 s에 저장된 값 중 가장 큰 값 반환
튜플도 리스트나 문자열과 마찬가지로 객체이다. 따라서 튜플이 갖고 있는 함수들도 존재한다.
s.count(x) # 튜플 s에 저장된 x의 개수 반환
s.index(x) # 튜플 s에 저장된 첫 번째 x의 인덱스 값 반환
리스트를 대상으로 한 연산들 또한(in, not in, +, *, 인덱싱, 슬라이싱) 튜플을 대상으로 연산이 가능하다.
nums = (1, 2, 3, 4)
3 in nums # True
2 not in nums # False
# 기존의 nums의 값이 수정이 된 것이 아니라 새로운 값을 갖게 된 것이다.
nums + (4,5) # (1, 2, 3, 4, 4, 5)
nums * 2 # (1, 2, 3, 4, 1, 2, 3, 4)
nums[:4] # (1, 2, 3, 4)
for i in (1, 3, 5, 7, 9):
print(i, end=' ') # 출력: 1 3 5 7 9
● 말이 나온 김에 리스트 안에 저장된 데이터를 바꿔보자
튜플 내부의 데이터를 바꾸는 것은 불가능하지만, 리스트 내의 튜플을 바꾸는 것은 가능하다. 리스트는 변경가능한 타입의 객체이기 때문이다. frns[0] 값이 바뀐 것을 확인할 수 있다.
● 범위를 지정하는 레인지(range)
for i in range(1, 11):
print(i, end=' ')
지금까지는 range(1, 11)를 리스트 [1,2,3,4,5,6,7,8,9,10]을 대신하는 정도로만 이해했다. 그러니 이는 range 함수의 호출이다. 그리고 이 함수가 호출되면 객체가 생성되는데, 이 객체는 다음과 같이 변수에 저장할 수 있고 또 type 함수에 전달해서 데이터형도 확인할 수 있다.
r = range(1, 100) # range호출로 만들어진 객체를 변수 r에 담는다
type(r) # 아래에 출력된 <class 'range'>는 전달된 값이 'range형'임을 의미한다
레인지가 담고 있는 정보는 "1 이상 1000미만의 정수들" 과 같은 스타일의 '값의 범위'이다. range는 범위 정보를 담고 있기 때문에 이를 대상으로 in 연산이나 not in 연산도 할 수 있다.
다음의 두 함수를 알면 range를 보다 유용하게 사용할 수 있다.
list(s) # s의 내용으로 채워진 리스트를 만들어 주겠다
tuple(s) # s의 내용으로 채워진 튜플을 만들어 주겠다
list((1, 2, 3)) # tuple -> list, [1,2,3]
list(range(1,5)) # range -> list, [1,2,3,4]
list('Hello') # str -> list, ['H', 'e', 'l', 'l', 'o']
tuple([1, 2, 3]) # list -> tuple, (1,2,3)
tuple(range(1, 5)) # range -> tuple, (1,2,3,4)
tuple('Hello') # str -> tuple, ('H', 'e', 'l', 'l', 'o')
list(range(1, 10, 2)) # [1, 3, 5, 7, 9]
tuple(range(1, 10, 3)) # (1, 4, 7)
● 레인지(range) 범위 거꾸로 지정하기
range(10, 2, 1) # range(10,2)와 동일한 것으로 10부터 1씩 증가해서 2에 가까워지는 정수는 없으므로
list(range(10, 2)) # 결과: [], 만들어진 레인지는 텅 비게 된다.
range(10, 2, -1) # 세 번째 전달인자를 음수로 바꾸면 의미가 달라진다. 10에서 2 이전까지 값이 1씩
# 감소하는 형태로 레인지의 범위가 형성되기 때문이다.
list(range(10, 2, -1)) # [10, 9, 8, 7, 6, 5, 4, 3]
list(range(10, 2, -2)) # [10, 8, 6, 4]
list(range(10, 2, -3)) # [10, 7, 4]
'Programming > python' 카테고리의 다른 글
파이썬 기초편(1) - 클래스와 객체 (0) | 2022.06.14 |
---|---|
파이썬 기초편(1) - 딕셔너리(Dictionary) (0) | 2022.06.14 |
파이썬 기초편(1) - '모듈의 이해' 그리고 '수학 모듈' 이용하기 (0) | 2022.06.12 |
파이썬 기초편(1) - 리스트 (0) | 2022.06.07 |
파이썬 기초편(1) (0) | 2022.05.19 |