튜플도 자료형의 일종이고 레인지도 자료형의 일종이다.
lst = [1,2,3]
type(lst)
대괄호로 묶인 것이 리스트이다. 리스트는 다양한 값을 하나로 묶어놓기 위한 자료형이다.
리스트는 mutable 객체이다 리스트는 리스트 안에 저장된 값을 변경 또는 수정할 수 있다.
즉 리스트에 저장된 데이터를 변경 할 수 있는 객체다. 그게 mutable 객체
tp1 = (1,2,3)
type(tp1)
소괄호로 묶인 것이 튜플이다. 튜플 또한 다양한 값을 하나로 묶어놓기 위한 자료형이다.
튜플은 immutable 객체이다. 튜플은 튜플 안에 저장된 값을 변경 또는 수정할 수 없다. 그래서 immutable 객체이다.
우리가 아는 대표적인 immutable 객체는 문자열이다. 문자열은 만들어놓으면 변경 또는 수정 할 수 없다.
리스트와 튜플은 저장된 값을 변경 또는 수정하는 부분을 제외하면 거의 유사하다.
튜플이 사용되는 목적은 값 또는 데이터를 묶기 위해서이다.
'리스트가 있는데 굳이 튜플을 쓸 필요가 있나?' 라는 생각이 들 수도 있다. 리스트가 훨씬 많이 쓰이긴하지만, 튜플이 없으면 아쉬운 포인트가 존재한다.
frns1 = [['동수',131120], ['진우', 130312], ['선영', 130904]]
frns2 = [('동수',131120), ('진우', 130312), ('선영', 130904)]
둘 다 변수에 리스트를 담았다. 위의 코드 두 개는 이름과 생년월일을 리스트에 담은 코드이다.
위의 이름과 생년월일 정보 같이, 참조하는 목적으로만 존재하는 값들이 있다.
참조를 목적으로 하는 값은 변하면 안 된다. 생년월일을 알아보려는데 바뀌어있으면 안 되지 않겠는가
하지만 frns1처럼 리스트로 묶어놓으면 수정 또는 변경이 가능하기에, 혹시라도 참조할 데이터가 변경될 수 도 있다. 그래서 이렇게 참조만을 위한 데이터를 묶을 때는 수정 또는 변경이 불가능한 튜플을 사용한다. frns1의 생년월일 정보는 프로그래머가 실수로 바꿀 수 있지만 frns2의 생년월일 정보는 튜플로 묶였기에 절대 바꿀 수 없다.
결론
참조만을 위한 데이터도 존재하는데, 이러한 데이터는 실수로 변경하는 것을 막기 위해서, 튜플에다 저장하는 것이 프로그램의 안정성을 높이는 하나의 방법이 된다.
frns1 = [['동수',131120], ['진우', 130312], ['선영', 130904]]
frns2 = [('동수',131120), ('진우', 130312), ('선영', 130904)]
frns1에서 ['동수',13112]는 frns1[0]이고 ['진우',130312]는 frns1[1]이고 ['선영',130904]는 frns1[2]이다.
마찬가지로 frns2 에서 ('동수',13112)는 frns2[0]이고 ('진우',130312)는 frns2[1]이고 ('선영',130904)는 frns2[2]이다.
근데 만약 frns1[0]인 ['동수',131120]라는 리스트에서 '동수' 또는 131120에만 접근하고 싶으면 어떻게 해야 할까?
'동수'만 출력하고 싶으면 frns1[0][0]를 입력하면 되고, 131120만 출력하고 싶으면 frns1[0][1]을 입력하면 된다. 만약 동수의 생년월일을 130101로 바꾸고 싶으면 frns1[0][1] = 130101 라고 입력하면 되는 것이다.
frns2의 튜플 또한 접근하는 방법은 똑같다. frns2[0][1]은 131120을 나타낸다. 하지만 리스트와 다르게 수정 또는 변경은 불가능하다.
nums = (3,2,5,7,1)
print(len(nums)) #튜플의 길이는?
print(max((nums))) #튜플 안에서 최대값은?
print(min((nums))) #튜플 안에서 최소값은?
nums = (1,2,3,1,2)
print(nums.count(2)) #2가 몇번 등장?
print(nums.index(1)) #1이라는 값이 처음 등장하는 인덱스 값은?
리스트라는 객체 안에는 다양한 함수가 존재한다. 튜플 또한 객체이기에, 안에 다양한 함수가 존재한다.
nums = (1,2,3)
print(3 in nums) #nums에 3이 있는가?
print(2 not in nums) #nums에 2가 없는가?
print(nums + (4,5)) #nums에 (4,5)를 덧붙인 결과는?
print(nums * 2) #nums을 두 개 덧붙인 결과는?
print(nums[0:3]) #nums[0]~nums[2]를 꺼내면?
여기서 덧셈은 nums이라는 원본을 변경하는 게 아니라, 원본 + (4,5)를 합친 (1,2,3,4,5)라는 새로운 값을 만드는 것이다. 곱셈도 마찬가지이다.
for i in (1,3,5,7,9):
print(i, end = ' ')
리스트 자리에 튜플을 넣어도 된다. 동작방식도 똑같다.
리스트나 튜플을 통해서는 [~부터 ~까지]를 표현할 수 없다. 범위를 중심으로 데이터를 표현하기 위한 도구가 range이다.
r = range(1,10)에서 range(1,10)을 range함수의 호출이라고 보면 된다. range함수가 호출이 되면 객체가 생성되고 객체 안에는 1부터 9까지 라는 범위 정보가 담긴다. 그 객체가 r이라는 변수에 저장되는 것이다.
range(1,1000)은 [1 <= 정수 < 1000]의 범위를 가진다. 레인지도 두 개 이상의 값을 나란히 모아놨다는 관점에서는 리스트, 튜플과 유사한 부분이 있다.
r = range(1,10)
9 in r
r이 range이기에, [9 in r]을 r안에 9가 있는지 물어보는 의미로 해석하기보다는 r이 담고 있는 범위에 9가 포함되는지 물어보는 의미로 해석하는 것이 맞다.
10 not in r
[r이 담고 있는 범위 안에 10이 포함되어있지 않냐?]라는 뜻
list함수는 리스트를 만들어낸다. 재료를 전달하면 그 재료를 끄집어내서 리스트를 만들어준다. tuple함수는 튜플을 만들어낸다. 재료를 전달하면 그 재료를 끄집어 내서 튜플을 만들어준다.
list((1,2,3))
[1,2,3]을 만들어준다.
list(range(1,5))
range 범위에 해당하는 모든 값을 리스트로 만들어준다. 즉 [1,2,3,4]를 만들어준다
list("Hello")
문자열 각각을 쪼개서 ['H','e''l','l','o']를 만들어준다.
tuple([1,2,3])
tuple(range(1,5))
tuple("Hello")
위의 예제와 같다 다만 튜플로 바꿔줄 뿐이다.
리스트, 튜플함수는 어느 때 사용하나?
예를 들어 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]라는 리스트가 필요할 때, 이 리스트를 직접 입력하는 것보다는 1st = list(range(1,16))으로 입력하는 것이 훨씬 깔끔하고 보기 좋을 것이다.
range(a,b,c)
a부터 b-1까지의 범위에서 c씩 증가하는 range이다.
range(1,10,2)
1부터 9까지의 범위에서 2씩 증가하는 range이다
range(1,10,3)
1부터 9까지의 범위에서 3씩 증가하는 range이다.
list(range(1,10,2))
1부터 9까지 2씩 증가하는 리스트 만들기
list(range(1,10,3))
1부터 9까지 3씩 증가하는 리스트 만들기
list(range(2,10))
[2,3,4,5,6,7,8,9]가 출력된다
list(range(2,10,1))
위의 코드와 같은 결과가 출력된다. 즉 위의 코드는 1이 생략되었다고 봐도 된다.
list(range(10,2))
10부터 시작해서 3까지 도달해야 한다. 마찬가지로 1이 생략되었다고 봐도 된다.
이 range함수의 범위는 10부터 1씩 증가하면서 3에 도달하라는 의미인데, 10부터 1씩 증가해서 3을 만날 수가 없으니 말 자체가 안 되는 범위이다. 즉 빈리스트가 출력된다. 비어있는 범위값을 가진 range라고 보면 된다.
list(range(10,2,-1))
하지만 이런 식이면 말이 된다. 10부터 -1씩 증가하면서 3까지 도달하라고 한다면 10부터 출발해서 3까지 -1씩 줄이면 되고, 결국 3을 만나게 되기에 [10,9,8,7,6,5,4,3]이 될 것이다.
'프로그래밍 언어 > 파이썬 기초' 카테고리의 다른 글
파이썬 모듈 import (0) | 2023.05.23 |
---|---|
파이썬 함수 매개변수 등 (0) | 2023.05.23 |
파이썬 for문,while문 (0) | 2023.05.23 |
파이썬 bool형,if문, 논리연산자 (0) | 2023.05.22 |
파이썬 여러가지 기능의 함수들 (0) | 2023.05.18 |