2023. 2. 7. 20:42ㆍ파이썬(Python)
1. Tuple
- 파이썬에서 새로운 형태를 정의할 때 복잡하지 않은 경우는 클래스(class)를 만들지 않고 튜플(tuple)을 이용하여 해결할 수 있다.
- 함수를 구현할 때 2개 이상의 값을 반환하는 경우는 다음과 같다.
def two_numbers():
return 1,2
print(two_numbers())
결과
(1, 2)
- 이처럼 튜플은 소괄호로 둘러싸인 형태로 정의되어 있다.
- 튜플은 리스트와 비슷하지만 차이점이 존재한다.
1. 튜플에 있는 값은 수정할 수 없다.
2. 튜플에 값을 추가할 수 없다.
3. 튜플 내에 값을 삭제할 수 없다.
4. 리스트는 mutable 하지만 튜플은 immutable 하다.
● 기능적으로 보면 리스트가 튜플보다 더 좋지만 튜플이 필요한 경우가 있다.
1. 리스트는 동적 배열이다.
- 동적 배열은 초기값을 최소한으로 설정해 배열을 생성한다.
- 배열 내에 원소가 가득 차면 원소를 추가하여 사이즈를 늘린다.
2. 리스트는 가변 객체이다.
- 리스트는 mutable 하기 때문에 연산을 진행하면 새로운 메모리 공간을 할당해주어야 한다.
- 따라서 immutable 한 튜플보다 오버헤드가 크다.
● 이러한 특징 때문에 리스트는 튜플보다 무거운 성격을 지니고 있다.
● 따라서 튜플은 리스트와 비교하여 메모리 용량을 아끼고 수행 시간이 빨라 성능을 향상하는데 도움이 된다.
2. 패킹과 언패킹
a,b=(1,2)
print(a)
print(b)
결과
1
2
- 위와 같이 코드를 진행하면 a, b를 각각 1, 2라는 값을 받게 된다.
- 이것을 튜플 언패킹 (Tuple Unpacking)이라 한다.
- 언패킹을 활용하면 여러 개의 반환값을 갖고 각각의 변수에 할당할 수 있다.
c=1,2,3,4,5
print(c)
결과
(1, 2, 3, 4, 5)
- 위와 같이 여러 개의 값을 하나의 변수에 넣으면 튜플 형식으로 묶어서 값을 넣을 수 있다.
- 이것을 튜플 패킹 (Tuple Packing)이라 한다.
3. 클래스 대신 튜플 사용하기
student=(50,70,80)
kor,math,eng=student
print(f'학생의 국어 성적은 {kor}')
print(f'학생의 수학 성적은 {math}')
print(f'학생의 영어 성적은 {eng}')
결과
학생의 국어 성적은 50
학생의 수학 성적은 70
학생의 영어 성적은 80
- 위와 같이 튜플 형태로 값을 저장한다.
- 튜플을 이용하는 경우 각 값이 무엇인지 알기 어렵다.
- 따라서 언패킹을 통해 적절한 변수 이름을 붙인다.
student=(0,0,0)
kor,math,eng=student
print(f'학생의 국어 성적은 {kor}')
print(f'학생의 수학 성적은 {math}')
print(f'학생의 영어 성적은 {eng}')
결과
학생의 국어 성적은 0
학생의 수학 성적은 0
학생의 영어 성적은 0
- 튜플은 클래스와 같이 기본값이라는 개념이 없다.
- 원하는 값이 정해지지 않았으면, 초기값을 직접 넣어 생성한다.
student=(0,0,0)
kor,math,eng=student
print(f'학생의 국어 성적은 {kor}')
print(f'학생의 수학 성적은 {math}')
print(f'학생의 영어 성적은 {eng}')
student=(kor,80,90)
kor,math,eng=student
print(f'학생의 국어 성적은 {kor}')
print(f'학생의 수학 성적은 {math}')
print(f'학생의 영어 성적은 {eng}')
결과
학생의 국어 성적은 0
학생의 수학 성적은 0
학생의 영어 성적은 0
학생의 국어 성적은 0
학생의 수학 성적은 80
학생의 영어 성적은 90
- 튜플은 immutable 하기 때문에 원소 값을 바꿀 수 없다.
- 값을 바꾸기 위해서는 새로운 튜플을 생성해야 한다.
- 만약 1개의 값만 필요하다면 언패킹을 할 때 필요 없는 곳은 '_'를 사용한다.
- 예를 들어 국어, 수학, 영어 점수 중 수학 점수만 필요한 경우는 다음과 같다.
student=(70,80,90)
_,math,_=student
print(f'학생의 수학 성적은 {math}')
결과
학생의 수학 성적은 80
4. 튜플을 사용한 객체 리스트
- 학생 3명의 국어, 수학, 영어 점수를 관리하는 정보는 다음과 같다.
students=[(10,20,30),(40,50,60), (60,70,80)]
n=2
student=students[n-1]
kor,math,eng=student
print(f'{n}번째 학생의 국어 점수는 {kor}')
print(f'{n}번째 학생의 수학 점수는 {math}')
print(f'{n}번째 학생의 영어 점수는 {eng}')
결과
2번째 학생의 국어 점수는 40
2번째 학생의 수학 점수는 50
2번째 학생의 영어 점수는 60
- 3명의 학생의 국어, 수학, 영어 점수를 입력하여 관리하는 방법은 list comprehension을 사용하면 다음과 같다.
students=[tuple(input(f'{i+1}번째 학생의 국, 수, 영 점수는? ').split())
for i in range(3)
]
n=2
student=students[n-1]
kor,math,eng=student
print(f'{n}번째 학생의 국어 점수는 {kor}')
print(f'{n}번째 학생의 수학 점수는 {math}')
print(f'{n}번째 학생의 영어 점수는 {eng}')
결과
>> 1번째 학생의 국, 수, 영 점수는? 10 20 30
>> 2번째 학생의 국, 수, 영 점수는? 20 30 50
>> 3번째 학생의 국, 수, 영 점수는? 60 30 40
2번째 학생의 국어 점수는 20
2번째 학생의 수학 점수는 30
2번째 학생의 영어 점수는 50
'파이썬(Python)' 카테고리의 다른 글
[Python] 우선 순위 객체 정렬, 다양한 조건의 객체 정렬 - class, tuple, lambda, cmp_to_key (0) | 2023.09.14 |
---|---|
[Python] 객체 정렬 - 클래스, 튜플 객체 정렬. lambda. 오름차순. 내림차순. 문자열 사전순 (0) | 2023.02.11 |
[Python] 클래스(Class) - 클래스 정의, 정보 저장, 값 변경, 객체 리스트 (0) | 2023.02.05 |
[Python] 정렬 - 숫자, 문자열, 문자열 리스트, 오름차순 및 내림차순 (0) | 2023.01.29 |
[Python] 재귀 함수 - Return Value. 문제풀이 (홀수짝수 합, 최대최소, 점화식, 최소공배수) (0) | 2023.01.23 |