튜플이란
여러 항목을 순서대로 저장하는 컬렉션 타입이다. 리스트와 유사하지만 값들이 불변하다는 특징이 있다. 한번 생성된 후에는 요소를 추가, 제거 또는 수정이 불가한 데이터 구조이다.
tuple
tu1 = (1,) # 요소를 1개만 저장할 때
# tu1 = (1)
print(tu1)
# tu1[0] = 100 # TypeError: 'tuple' object does not support item assignment
tu2 = (1, 3, 5, 7)
print(tu2)
tu3 = 1, 3, 5, 7
print(tu3, type(tu3))
tu4 = ('apple', 'banana', ('🍍', '🙊'))
print(tu4)
print(tu4[0])
print(tu4[2][0])
print(type(tu4))
print(type(tu4[2]))
print(type(tu4[2][0]))
tu5 = ('apple', 'banana', ['🍍', '🙊'])
print(tu5)
print(tu5[2][0])
print(type(tu5))
print(type(tu5[2]))
print(type(tu5[2][0]))
tu5[2][0] = 5
print(tu5[2])
튜플을 생성하는 방법과 인덱싱 방법이다. tu1 = (1) 의 경우 일반 상수에 소괄호를 두른 형태로 판단하여 튜플이 생성되지 않는다.
따라서 요소가 한 개인 경우에도 위와 같은 형태를 통해 생성해야한다.
4번째줄에 주석처리된 에러로 튜플이 불변하다는 사실을 알 수 있다.
튜플을 사용할 땐 데이터타입에 주의하며 사용하는 것이 좋다.
튜플 슬라이싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[1:])
print(tu1[1:3])
리스트와 마찬가지로 슬라이싱이 가능하다. 슬라이싱은 튜플 요소를 변경하는 것이 아니기 때문에 가능하다.
튜플의 연산
tu1 = (10, 20, 30)
tu2 = (40, 50, 60)
print(tu1 + tu2)
print(tu2 + tu1)
tu1 = tu1 + (40, 50)
print(tu1)
print(tu1 * 3)
튜플은 리스트와 같이 결합이 가능하다.
위 코드를 보면 이상한 점이 있다.
tu1 = tu1 + (40, 50) 의 경우 tu1을 변경하는 것이 아니라 (40, 50) 을 결합한 다른 튜플을 가리키는 것이기 때문에 튜플의 요소 변경과는 다르다.
슬라이싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[1:])
print(tu1[1:3])
인덱싱
tu3 = (10, 20, 30)
print(tu3[0] + tu3[2])
튜플도 다른 컬렉션과 마찬가지로 인덱싱과 슬라이싱이 가능하다.
언패킹
apple, banana = ('김사과', '바나나') # 언패킹
print(apple, banana)
튜플과 in
2 in (2, 4, 6, 8, 10)
in 키워드를 사용해서 튜플 안에 해당 원소가 있는지 알 수 있다.
있다면 True를 반환, 없다면 False를 반환.
sorted 함수
tu1 = (1, 3, 2, 0)
tu1 = sorted(tu1) # sorted의 반환값은 list
print(tu1)
리스트는 자체 메서드인 sort()와 함수 sorted()를 사용하여 정렬이 가능하다.
li1 = [1, 6, 4, 7]
print(id(li1))
li1.sort()
print(li1)
print(id(li1))
리스트에서 sort()를 사용하면 정렬을 할 수 있다.
정렬 후 id()함수를 통해 확인해보니 같은 객체를 가리킴을 알 수 있다.
이 말은 리스트 자체가 변경되었다는 말과 같다.
하지만 튜플은 불변하다. 따라서 튜플에는 sort() 메서드가 없다.
근데 sorted() 함수는 사용이 가능함을 위에서 확인할 수 있다.
sorted() 함수는 해당 타입의 객체를 정렬한 후 정렬된 객체를 반환한다. 즉 정렬된 객체가 새로 생성되어 반환된다.
따라서 반환값이 튜플이 아닌 리스트임을 확인할 수 있다.
input() 함수
- 데이터를 입력받을 수 있게 해주는 함수
- 입력받은 데이터의 데이터 타입은 항상 문자형
input(), 입력과 출력
name = input()
print(name)
지금까지 print() 함수를 통해 원하는 동작이 잘 되는지 확인하였다.
임의로 변수에 값을 지정해주었다면 이제는 입력한 대로 동작을 하는지 확인할 수 있다.
바로 input()함수가 있기 때문이다.
출력 포맷
name = input("이름을 입력하세요 ")
print(f'{name}님 안녕하세요')
print() 함수를 배울때 배운 포맷중 자주 쓰일 포맷이다.
이처럼 입력받은 값을 변수에 저장하여 활용할 수 있다.
언패킹, split()
name, age, weight = '김사과', 20, 50.5
print(name, age, weight, sep='\n')
name, age, weight = input('이름, 나이, 몸무게를 차례대로 입력하세요 ').split(' ')
print(name, age, weight, sep='\n')
문자열(str)의 split(sep) 메서드를 사용한다.
split(sep)의 동작은 입력받은 문자열을 sep에 해당하는 문자를 경계로 나누고,
나눈 요소들을 리스트로 반환한다.
반환된 리스트는 언패킹을 통해 name, age, weight 각각에 저장된다.
input() 반환값은 문자열
num1 = input("첫번째 숫자를 입력하세요. ")
num2 = input("두번째 숫자를 입력하세요. ")
print('결과: ', num1 + num2)
num1 = int(input('첫번째 숫자를 입력하세요. '))
num2 = int(input('두번째 숫자를 입력하세요. '))
print('결과: ', num1 + num2)
input() 함수로 입력받은 값은 문자열이다.
따라서 위의 num1, num2에 해당하는 데이터 타입은 str이기 때문에 연산의 결과가 문자열 결합이 된다.
아래의 num1, num2는 int() 형변환을 통해 데이터 타입이 int이고, 연산의 결과가 정수가 된다.
'파이썬 > 기본' 카테고리의 다른 글
[파이썬] 컬렉션 타입, 딕셔너리 (0) | 2023.09.05 |
---|---|
[파이썬] 컬렉션 타입, 세트 (0) | 2023.09.05 |
[파이썬] 컬렉션 타입, 리스트2 (0) | 2023.09.04 |
[파이썬] 컬렉션 타입, 리스트1 (0) | 2023.09.04 |
[파이썬] 문자열 (0) | 2023.09.01 |
댓글