본문 바로가기
코딩/파이썬

파이썬 - 튜플

by Song1234 2024. 3. 13.

1. 튜플

여러 가지 데이터 타입의 값을 저장할 수 있는, 변경 불가능(immutable)한 순서가 있는 컬렉션이다.
한번 들어간 요소는 변경이 불가능하다. 튜플은 소괄호() 를 이용해서 사용한다.

1-1. 튜플의 사용

tu1 = (1,) # 요소가 1개일 경우 끝에 컴마를 붙여야함
print(tu1)
print(type(tu1))

결과:
(1,)
<class 'tuple'>

 

 

요소가 1개일 경우 끝에 컴마를 붙여야 튜플이 된다.


tu2 = (1, 3, 5, 7)
print(tu2)
print(type(tu2))

결과:
(1, 3, 5, 7)
<class 'tuple'>

 

 

값이 여러개 일경우 끝에 컴마를 붙이지 않아도 됨.

 


tu3 = tuple([1, 3, 5, 7])
print(tu3)
print(type(tu3))

결과:
(1, 3, 5, 7)
<class 'tuple'>

 

 

튜플 소괄호 안에 대괄호 를 이용하여 만들수도 있다.


tu4 = 1, 3, 5, 7
print(tu4)
print(type(tu4))

결과:
(1, 3, 5, 7)
<class 'tuple'>

 

 

소괄호를 쓰지 않아도 튜플이된다.


tu5 = ('apple', 'banana', ('🍓','🍎'))
print(tu5)
print(tu5[0])
print(tu5[2][0])
print(type(tu5))
print(type(tu5[2]))
print(type(tu5[2][0]))

결과:
('apple', 'banana', ('🍓', '🍎'))
apple
🍓
<class 'tuple'>
<class 'tuple'>
<class 'str'>

 

 

위와 같이 리스트 처럼 사용할 수도 있다.


tu5 = ('apple', 'banana', ('🍎','🍓'))
tu5[0] =  'orange'


결과:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-15-3970025b24bb> in <cell line: 2>()
      1 tu5 = ('apple', 'banana', ('🍎','🍓'))
----> 2 tu5[0] =  'orange'

TypeError: 'tuple' object does not support item assignment

튜플은 요소를 변경 할수 없기때문에 변경하려 하면 에러가난다.


tu5 = ('apple', 'banana', ('🍎','🍓'))
tu5 = 'orange'
print(type(tu5))

결과:
orange
<class 'str'>

 

 

튜플의 메모리 자체를 바꾸는것은 가능하다.


tu5 = ('apple', 'banana', ['🍎','🍓'])
print(tu5)
print(tu5[2][0])
tu5[2][0] = '🍗'
print(tu5)

결과:
('apple', 'banana', ['🍎', '🍓'])
🍎
('apple', 'banana', ['🍗', '🍓'])

 

 

튜플안에 리스트를 넣는것도 가능하고 리스트안의 값은 변경이 가능하다.


tu5 = ('apple', 'banana', ['🍎','🍓'])
print(tu5)
print(tu5[2][0])
tu5[2][0] = '🍗'
print(tu5)

tu5[2] = '🍢'

결과:
('apple', 'banana', ['🍎', '🍓'])
🍎
('apple', 'banana', ['🍗', '🍓'])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-4a675a804e3f> in <cell line: 7>()
      5 print(tu5)
      6 
----> 7 tu5[2] = '🍢'

TypeError: 'tuple' object does not support item assignment

 

 

하지만 위의 코드는 리스트안의 값이 아닌 튜플 안의 리스트 를 변경하는 것 이기 때문에 불가능하다.

*1-2. 인덱싱 *

#인덱싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[0])
print(tu1[-1])

결과:
1
banana

1-3. 슬라이싱

#슬라이싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[1:])
print(tu1[1:3])

결과:
(2, 'apple', 'banana')
(2, 'apple')

 

 

리스트와 같이 인덱싱과 슬라이싱 또한 가능하다.

1-4. 결합

#결합
tu1 = (10, 20, 30)
tu2 = (40, 50, 60)

print(tu1 + tu2)
print(tu2 + tu1)

결과:
(10, 20, 30, 40, 50, 60)
(40, 50, 60, 10, 20, 30)

 

 

결합 또한 가능 하다는것을 볼수있다.

1-5. 변경

tu1 = tu1 + (40, 50)
print(tu1)
print(tu1 * 3)

결과:
(10, 20, 30, 40, 50)
(10, 20, 30, 40, 50, 40, 50, 10, 20, 30, 40, 50, 40, 50, 10, 20, 30, 40, 50, 40, 50)

 

 

메모리 요소를 바꾸는것이 아닌 메모리 주소를 바꾸는것은 가능하며, 반복하여 출력하는것도 가능하다.

1-6. 연산


tu3 = (10, 20, 30)
print(tu3[0] + tu3[2])

결과:
40

 

 

요소를 더한값을 출력하는것은 가능하다.

1-7. 여러함수에 값 담기

apple, banana, orange = ('김사과', '반하나', '오렌지')
print(apple)
print(banana)
print(orange)

결과:
김사과
반하나
오렌지

 

 

튜플을 이용하면 위 처럼 여러함수에 순서대로 값을 넣을수 있다.(리스트도 가능하지만 튜플을 많이 사용한다)

 


apple, banana, orange = '김사과', '반하나', '오렌지'
print(apple)
print(banana)
print(orange)

결과:
김사과
반하나
오렌지

 

 

괄호를 사용하지 않아도 튜플로 담을수 있다.

1-8. in연산자


print(2 in (2, 4, 6, 8, 10))
print(3 in (2, 4, 6, 8, 10))

결과:
True
False

 

 

in 연산자를 이용하여 내가 원하는 값이 튜플 안에 있는지 True, False 로 알수있다.

1-9. 정렬

tu1 = (10, 30, 20, 70)
tu1.sort()

결과:
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-36-5eed31d2fddc> in <cell line: 2>()
      1 tu1 = (10, 30, 20, 70)
----> 2 tu1.sort()

AttributeError: 'tuple' object has no attribute 'sort'

tuple 에는 sort메서드가 존재하지 않는다.(튜플은 요소들의 위치가 바뀌면 값이 바뀌는 것 이기 때문에 sort로 정렬이 불가능하다.)


tu1 = (10, 30, 20, 70)
tu1 = sorted(tu1)
print(tu1)
tu1 = tuple(tu1)
print(type(tu1))

결과:
[10, 20, 30, 70]

 

 

sorted 함수로 다른 변수에 저장해서 정렬 할수는 있지만 list타입으로 반환이 되기 때문에 다시 tuple타입으로 변경 해주어야한다.

2.input 함수

  • 사용자 에게 데이터를 입력받을 수 있는 함수
  • 데이터는 항상 문자형(str)으로 입력된다.

2-1. input 입력받기.

name = input()

입력: 김사과

print(name)

결과:
김사과

 


name = input('이름을 입력하세요')

이름을 입력하세요 : 김사과

print(f'{name}님 안녕하세요!')

결과:
김사과님 안녕하세요!

 

 

입력을 받는 칸에 메세지를 작성할수있다.

2-2.여러함수 입력받기

# 김사과 20 50
# '김사과 20 50' -> ['김사과', '20', '50']
# name, age, weight = ['김사과', '20', '50']
name, age, weight = input('이름, 나이, 몸무게를 띄어쓰기로 구분하여 입력하세요').split(' ')

이름, 나이, 몸무게를 띄어쓰기로 구분하여 입력하세요 : 김사과 20 50

print(name, age, weight)

결과:
김사과 20 50

 

 

input 은 문자열 로 저장되기 때문에 문자열 함수도 이용이 가능하다.(split 을 이용하여 여러 함수를 저장하면 리스트 형식으로 저장이 된다.)

2-3.input 연산

num1 = input('첫번째 숫자를 입력하세요')
num2 = input('두번째 숫자를 입력하세요')
print('결과: ', num1 + num2)

첫번째 숫자를 입력하세요: 10
두번째 숫자를 입력하세요: 5
결과: 105

num1 = input('첫번째 숫자를 입력하세요')
num2 = input('두번째 숫자를 입력하세요')
print('결과: ', int(num1) + int(num2))

첫번째 숫자를 입력하세요: 10
두번째 숫자를 입력하세요: 5
결과: 15

3. 문제

  • 국어점수, 영어점수, 수학점수를 입력받아 총점, 평균을 구하는 프로그램을 작성해보다
  • 단, 입력방법은 100/70/85 형태로 입력
국어점수, 영어점수, 수학점수 = input('점수를 입력하세요.').split('/')
total = int(국어점수) + int(영어점수) + int(수학점수)
avg = total / 3
print(f'총점: {total}\n평균: %.2f' % (avg))

점수를 입력하세요.: 100/80/85
총점: 265
평균: 88.33

국어점수, 영어점수, 수학점수 = list(map(int,input().split('/')))
total = 국어점수 + 영어점수 + 수학점수
avg = total / 3
print(f'총점: {total}\n평균: %.2f' % (avg))

100/70/85
총점: 255
평균: 85.0

 

 

map함수 을 이용하면 입력을 받을때 int타입 으로 입력을 받을수있다.

'코딩 > 파이썬' 카테고리의 다른 글

파이썬 - 딕셔너리  (0) 2024.03.14
파이썬 - 세트  (0) 2024.03.14
파이썬 - 리스트  (0) 2024.03.13
파이썬의 변수  (0) 2024.03.12
문자열 다루기  (2) 2024.03.12