1. count()
튜플.count(값)
튜플에서 특정 값 개수 세기
# 성공: 값 개수 반환
nums = (1, 2, 2, 3)
result = nums.count(2)
print(result) # 2
# 성공: 없는 값은 0 반환
nums = (1, 2, 3)
print(nums.count(10)) # 0
# 주의: 완전히 같은 값만 셈
items = (1, "1", 1)
print(items.count(1)) # 2
print(items.count("1")) # 1
2. index()
튜플.index(값)
특정 값의 위치 찾기
# 성공: 값의 위치 반환
nums = (10, 20, 30)
result = nums.index(20)
print(result) # 1
# 성공: 첫 번째 위치만 반환
nums = (1, 2, 2, 3)
print(nums.index(2)) # 1
# 주의: 값이 없으면 에러 발생
nums = (1, 2, 3)
nums.index(10) # ValueError
3. 튜플은 값을 변경할 수 없음
튜플은 append(), remove(), pop(), sort() 같은 변경 메서드를 사용할 수 없음
튜플은 한 번 만들면 내부 값을 직접 수정할 수 없음
# 주의: append() 사용 불가
nums = (1, 2, 3)
nums.append(4) # AttributeError
# 주의: remove() 사용 불가
nums = (1, 2, 3)
nums.remove(2) # AttributeError
# 주의: 특정 위치 값 변경 불가
nums = (1, 2, 3)
nums[0] = 10 # TypeError
4. 튜플을 변경하고 싶으면 리스트로 변환
list(튜플)
tuple(리스트)
튜플을 리스트로 바꾼 뒤 수정하고 다시 튜플로 변환
# 성공: 튜플을 리스트로 바꿔 값 추가
nums = (1, 2, 3)
temp = list(nums)
temp.append(4)
nums = tuple(temp)
print(nums) # (1, 2, 3, 4)
# 성공: 튜플을 리스트로 바꿔 값 제거
nums = (1, 2, 3)
temp = list(nums)
temp.remove(2)
nums = tuple(temp)
print(nums) # (1, 3)
5. len()
len(튜플)
튜플 길이(요소 개수) 구하기
# 성공: 요소 개수 반환
nums = (1, 2, 3)
result = len(nums)
print(result) # 3
# 성공: 빈 튜플 길이
empty = ()
print(len(empty)) # 0
# 주의: 문자열 길이와는 다름
data = ("abc", "def")
print(len(data)) # 2
6. in
값 in 튜플
튜플 안에 값이 있는지 확인
# 성공: 값 존재 여부 확인
nums = (1, 2, 3)
print(2 in nums) # True
print(10 in nums) # False
# 성공: 문자열도 가능
fruits = ("apple", "banana")
print("apple" in fruits) # True
# 주의: 정확히 같은 값만 찾음
items = (1, "1")
print(1 in items) # True
print("1" in items) # True
7. not in
값 not in 튜플
튜플 안에 값이 없는지 확인
# 성공: 값이 없으면 True
nums = (1, 2, 3)
print(10 not in nums) # True
print(2 not in nums) # False
# 주의: 대소문자 구분함
fruits = ("Apple", "Banana")
print("apple" not in fruits) # True
8. 튜플 인덱싱
튜플[위치]
특정 위치 값 가져오기
# 성공: 인덱스로 값 접근
nums = (10, 20, 30)
print(nums[0]) # 10
print(nums[1]) # 20
# 성공: 음수 인덱스 사용 가능
nums = (1, 2, 3)
print(nums[-1]) # 3
print(nums[-2]) # 2
# 주의: 범위를 벗어나면 에러 발생
nums = (1, 2, 3)
nums[10] # IndexError
9. 튜플 슬라이싱
튜플[start:end]
튜플 일부 잘라내기
# 성공: 원하는 범위 추출
nums = (1, 2, 3, 4, 5)
print(nums[1:4]) # (2, 3, 4)
# 성공: 처음부터 자르기
print(nums[:3]) # (1, 2, 3)
# 성공: 끝까지 자르기
print(nums[2:]) # (3, 4, 5)
# 주의: 슬라이싱 결과도 튜플
nums = (1, 2, 3)
result = nums[:2]
print(result) # (1, 2)
print(type(result)) # <class 'tuple'>
10. 튜플 연결(+)
튜플 + 튜플
튜플끼리 이어 붙이기
# 성공: 튜플 연결
a = (1, 2)
b = (3, 4)
result = a + b
print(result) # (1, 2, 3, 4)
# 성공: 문자열 튜플도 가능
a = ("apple",)
b = ("banana",)
print(a + b) # ('apple', 'banana')
# 주의: 튜플과 리스트는 연결 불가
a = (1, 2)
b = [3, 4]
a + b # TypeError
11. 튜플 반복(*)
튜플 * 횟수
튜플을 원하는 횟수만큼 반복
# 성공: 튜플 반복
nums = (1, 2)
result = nums * 3
print(result) # (1, 2, 1, 2, 1, 2)
# 성공: 문자열 튜플도 반복 가능
fruits = ("apple", "banana")
print(fruits * 2) # ('apple', 'banana', 'apple', 'banana')
# 주의: 원본 튜플은 변경되지 않음
nums = (1, 2)
result = nums * 3
print(nums) # (1, 2)
print(result) # (1, 2, 1, 2, 1, 2)
12. min()
min(튜플)
튜플에서 가장 작은 값 찾기
# 성공: 가장 작은 값 반환
nums = (3, 1, 2)
result = min(nums)
print(result) # 1
# 성공: 문자열도 가능
fruits = ("banana", "apple", "orange")
print(min(fruits)) # apple
# 주의: 비교할 수 없는 타입이 섞이면 에러 발생
items = (1, "2", 3)
min(items) # TypeError
13. max()
max(튜플)
튜플에서 가장 큰 값 찾기
# 성공: 가장 큰 값 반환
nums = (3, 1, 2)
result = max(nums)
print(result) # 3
# 성공: 문자열도 가능
fruits = ("banana", "apple", "orange")
print(max(fruits)) # orange
# 주의: 비교할 수 없는 타입이 섞이면 에러 발생
items = (1, "2", 3)
max(items) # TypeError
14. sum()
sum(튜플)
튜플 안의 숫자 합계 구하기
# 성공: 숫자 합계 반환
nums = (1, 2, 3)
result = sum(nums)
print(result) # 6
# 성공: 빈 튜플은 0 반환
nums = ()
print(sum(nums)) # 0
# 주의: 숫자가 아닌 값이 있으면 에러 발생
items = (1, 2, "3")
sum(items) # TypeError
15. sorted()
sorted(튜플)
튜플을 정렬한 결과를 리스트로 반환
# 성공: 오름차순 정렬
nums = (3, 1, 2)
result = sorted(nums)
print(result) # [1, 2, 3]
# 성공: 문자열 정렬
fruits = ("banana", "apple", "orange")
print(sorted(fruits)) # ['apple', 'banana', 'orange']
# 주의: 결과는 튜플이 아니라 리스트
nums = (3, 1, 2)
result = sorted(nums)
print(result) # [1, 2, 3]
print(type(result)) # <class 'list'>
16. sorted(reverse=True)
sorted(튜플, reverse=True)
튜플을 내림차순 정렬한 리스트 반환
# 성공: 내림차순 정렬
nums = (3, 1, 2)
result = sorted(nums, reverse=True)
print(result) # [3, 2, 1]
# 성공: 문자열도 가능
fruits = ("banana", "apple", "orange")
print(sorted(fruits, reverse=True)) # ['orange', 'banana', 'apple']
# 주의: 원본 튜플은 변경되지 않음
nums = (3, 1, 2)
result = sorted(nums, reverse=True)
print(nums) # (3, 1, 2)
print(result) # [3, 2, 1]
17. tuple()
tuple(반복가능한값)
반복 가능한 값을 튜플로 변환
# 성공: 리스트를 튜플로 변환
nums = [1, 2, 3]
result = tuple(nums)
print(result) # (1, 2, 3)
# 성공: 문자열을 튜플로 변환
text = "abc"
print(tuple(text)) # ('a', 'b', 'c')
# 주의: 숫자 하나는 바로 튜플로 변환 불가
num = 10
tuple(num) # TypeError
18. list()
list(튜플)
튜플을 리스트로 변환
# 성공: 튜플을 리스트로 변환
nums = (1, 2, 3)
result = list(nums)
print(result) # [1, 2, 3]
# 성공: 변환 후 리스트 메서드 사용 가능
nums = (1, 2, 3)
result = list(nums)
result.append(4)
print(result) # [1, 2, 3, 4]
# 주의: 원본 튜플은 그대로 유지됨
nums = (1, 2, 3)
result = list(nums)
result.append(4)
print(nums) # (1, 2, 3)
print(result) # [1, 2, 3, 4]
19. tuple unpacking
변수1, 변수2 = 튜플
튜플 안의 값을 변수에 나누어 담기
# 성공: 튜플 값을 변수에 저장
person = ("Kim", 20)
name, age = person
print(name) # Kim
print(age) # 20
# 성공: 여러 개도 가능
nums = (1, 2, 3)
a, b, c = nums
print(a) # 1
print(b) # 2
print(c) # 3
# 주의: 변수 개수와 값 개수가 다르면 에러 발생
nums = (1, 2, 3)
a, b = nums # ValueError
20. 별표 unpacking
변수1, *변수2 = 튜플
남은 여러 값을 리스트로 묶어서 받기
# 성공: 남은 값을 리스트로 받기
nums = (1, 2, 3, 4)
first, *rest = nums
print(first) # 1
print(rest) # [2, 3, 4]
# 성공: 가운데 값 여러 개 받기
nums = (1, 2, 3, 4, 5)
first, *middle, last = nums
print(first) # 1
print(middle) # [2, 3, 4]
print(last) # 5
# 주의: 별표로 받은 값은 튜플이 아니라 리스트
nums = (1, 2, 3)
first, *rest = nums
print(rest) # [2, 3]
print(type(rest)) # <class 'list'>
21. 한 개짜리 튜플
(값,)
값이 하나인 튜플 만들기
# 성공: 한 개짜리 튜플 생성
num = (10,)
print(num) # (10,)
print(type(num)) # <class 'tuple'>
# 성공: 문자열 한 개짜리 튜플
fruit = ("apple",)
print(fruit) # ('apple',)
print(type(fruit)) # <class 'tuple'>
# 주의: 쉼표가 없으면 튜플이 아님
num = (10)
print(num) # 10
print(type(num)) # <class 'int'>
22. 괄호 없는 튜플
값1, 값2, 값3
괄호 없이도 튜플 생성 가능
# 성공: 괄호 없이 튜플 생성
nums = 1, 2, 3
print(nums) # (1, 2, 3)
print(type(nums)) # <class 'tuple'>
# 성공: 문자열도 가능
fruits = "apple", "banana"
print(fruits) # ('apple', 'banana')
print(type(fruits)) # <class 'tuple'>
# 주의: 한 개짜리 튜플은 쉼표 필요
num = 10,
print(num) # (10,)
print(type(num)) # <class 'tuple'>
23. tuple 안에 list
튜플 = ([값1, 값2], 값3)
튜플 자체는 변경할 수 없지만, 안에 있는 리스트는 변경 가능
# 성공: 튜플 안 리스트 값 변경
data = ([1, 2], 3)
data[0].append(4)
print(data) # ([1, 2, 4], 3)
# 성공: 튜플 안 리스트 요소 수정
data = ([1, 2], 3)
data[0][0] = 10
print(data) # ([10, 2], 3)
# 주의: 튜플의 요소 자체를 바꾸는 것은 불가
data = ([1, 2], 3)
data[0] = [10, 20] # TypeError
24. tuple 안에 tuple
튜플 = ((값1, 값2), 값3)
튜플 안에 튜플 넣기
# 성공: 중첩 튜플 생성
data = ((1, 2), 3)
print(data) # ((1, 2), 3)
print(data[0]) # (1, 2)
# 성공: 중첩 튜플 값 접근
data = ((1, 2), (3, 4))
print(data[0][0]) # 1
print(data[1][1]) # 4
# 주의: 안쪽 튜플도 변경 불가
data = ((1, 2), 3)
data[0][0] = 10 # TypeError
25. 튜플 비교
튜플1 == 튜플2
튜플1 < 튜플2
튜플은 앞에서부터 차례대로 비교
# 성공: 같은 튜플 비교
a = (1, 2)
b = (1, 2)
print(a == b) # True
# 성공: 앞에서부터 차례대로 비교
a = (1, 2)
b = (1, 3)
print(a < b) # True
# 주의: 앞 값이 다르면 뒤 값은 비교하지 않음
a = (1, 100)
b = (2, 0)
print(a < b) # True
26. 튜플 순회
for 변수 in 튜플:
튜플 값을 하나씩 꺼내서 사용
# 성공: 튜플 값 하나씩 출력
fruits = ("apple", "banana", "orange")
for fruit in fruits:
print(fruit)
# apple
# banana
# orange
# 성공: 숫자 튜플 순회
nums = (1, 2, 3)
for num in nums:
print(num * 2)
# 2
# 4
# 6
27. enumerate()
enumerate(튜플)
위치와 값을 함께 꺼내기
# 성공: 인덱스와 값 함께 출력
fruits = ("apple", "banana", "orange")
for index, fruit in enumerate(fruits):
print(index, fruit)
# 0 apple
# 1 banana
# 2 orange
# 성공: 시작 번호 변경
fruits = ("apple", "banana")
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
# 1 apple
# 2 banana
28. zip()
zip(튜플1, 튜플2)
여러 튜플 값을 짝지어서 사용
# 성공: 두 튜플 값 짝짓기
names = ("Kim", "Lee", "Park")
ages = (20, 25, 30)
for name, age in zip(names, ages):
print(name, age)
# Kim 20
# Lee 25
# Park 30
# 주의: 길이가 다르면 짧은 쪽 기준으로 묶임
names = ("Kim", "Lee", "Park")
ages = (20, 25)
for name, age in zip(names, ages):
print(name, age)
# Kim 20
# Lee 25
29. reversed()
reversed(튜플)
튜플을 뒤에서부터 꺼내기
# 성공: 튜플을 거꾸로 순회
nums = (1, 2, 3)
for num in reversed(nums):
print(num)
# 3
# 2
# 1
# 주의: 결과를 바로 출력하면 객체로 보임
nums = (1, 2, 3)
result = reversed(nums)
print(result) # <reversed object at ...>
print(tuple(result)) # (3, 2, 1)
30. all()
all(튜플)
튜플 안의 모든 값이 참인지 확인
# 성공: 모두 True면 True
items = (True, True, True)
print(all(items)) # True
# 성공: 하나라도 False면 False
items = (True, False, True)
print(all(items)) # False
# 주의: 0, 빈 문자열은 False로 판단
items = (1, "hello", 0)
print(all(items)) # False
31. any()
any(튜플)
튜플 안에 하나라도 참인 값이 있는지 확인
# 성공: 하나라도 True면 True
items = (False, False, True)
print(any(items)) # True
# 성공: 모두 False면 False
items = (False, 0, "")
print(any(items)) # False
# 주의: 빈 튜플은 False 반환
items = ()
print(any(items)) # False
32. 튜플 조건식
값 if 조건 else 값
조건에 따라 튜플 값을 선택
# 성공: 조건에 따라 튜플 선택
is_admin = True
menu = ("read", "write") if is_admin else ("read",)
print(menu) # ('read', 'write')
# 성공: 조건이 False일 때 다른 튜플 선택
is_login = False
status = ("로그인됨",) if is_login else ("로그인 필요",)
print(status) # ('로그인 필요',)
# 주의: 한 개짜리 튜플은 쉼표 필요
is_login = True
status = ("로그인됨") if is_login else ("로그인 필요")
print(status) # 로그인됨
print(type(status)) # <class 'str'>
33. 튜플 생성
()
(값1, 값2)
빈 튜플 또는 여러 값을 가진 튜플 만들기
# 성공: 빈 튜플 생성
empty = ()
print(empty) # ()
print(type(empty)) # <class 'tuple'>
# 성공: 여러 값 튜플 생성
nums = (1, 2, 3)
print(nums) # (1, 2, 3)
print(type(nums)) # <class 'tuple'>
# 주의: 튜플은 소괄호보다 쉼표가 중요함
nums = 1, 2, 3
print(nums) # (1, 2, 3)
print(type(nums)) # <class 'tuple'>
34. 튜플 길이 확인
len(튜플)
튜플 안에 값이 몇 개인지 확인
# 성공: 튜플 길이 확인
nums = (10, 20, 30)
print(len(nums)) # 3
# 성공: 중첩 튜플도 바깥 요소 기준
data = ((1, 2), (3, 4), (5, 6))
print(len(data)) # 3
# 주의: 안쪽 값 개수를 모두 세지 않음
data = ((1, 2), (3, 4))
print(len(data)) # 2
print(len(data[0])) # 2
35. 튜플 음수 인덱싱
튜플[-위치]
뒤에서부터 값 가져오기
# 성공: 마지막 값 가져오기
nums = (10, 20, 30, 40)
print(nums[-1]) # 40
print(nums[-2]) # 30
# 성공: 문자열 튜플도 가능
fruits = ("apple", "banana", "orange")
print(fruits[-1]) # orange
# 주의: 음수 인덱스도 범위를 벗어나면 에러
nums = (1, 2, 3)
print(nums[-4]) # IndexError
36. 튜플 슬라이싱 step
튜플[start:end:step]
간격을 정해서 튜플 자르기
# 성공: 2칸씩 건너뛰기
nums = (1, 2, 3, 4, 5, 6)
print(nums[::2]) # (1, 3, 5)
# 성공: 1번 위치부터 2칸씩
nums = (1, 2, 3, 4, 5, 6)
print(nums[1::2]) # (2, 4, 6)
# 성공: 거꾸로 뒤집기
nums = (1, 2, 3)
print(nums[::-1]) # (3, 2, 1)
37. 튜플 값 변경 불가
튜플[위치] = 값
튜플은 한 번 만든 뒤 값 변경 불가
# 주의: 특정 위치 값 변경 불가
nums = (1, 2, 3)
nums[0] = 10 # TypeError
# 주의: 새 값 추가 불가
nums = (1, 2, 3)
nums.append(4) # AttributeError
# 성공: 새 튜플을 만들어 다시 저장은 가능
nums = (1, 2, 3)
nums = nums + (4,)
print(nums) # (1, 2, 3, 4)
38. 튜플 삭제
del 튜플
튜플 변수 자체 삭제
# 성공: 튜플 변수 삭제
nums = (1, 2, 3)
del nums
# nums는 더 이상 사용할 수 없음
# 주의: 튜플 안의 특정 값만 삭제 불가
nums = (1, 2, 3)
del nums[0] # TypeError
39. 튜플 포함 관계
값 in 튜플
값 not in 튜플
튜플 안에 값이 있는지 확인
# 성공: 값이 있는지 확인
nums = (1, 2, 3)
print(2 in nums) # True
print(10 in nums) # False
# 성공: 값이 없는지 확인
print(10 not in nums) # True
# 주의: 대소문자 구분
fruits = ("Apple", "Banana")
print("apple" in fruits) # False
40. 튜플 반복문과 break
for 변수 in 튜플:
if 조건:
break
조건을 만나면 반복 중단
# 성공: 특정 값에서 반복 중단
nums = (1, 2, 3, 4, 5)
for num in nums:
if num == 3:
break
print(num)
# 1
# 2
# 성공: 문자열 튜플에서도 가능
fruits = ("apple", "banana", "orange")
for fruit in fruits:
if fruit == "banana":
break
print(fruit)
# apple
41. 튜플 반복문과 continue
for 변수 in 튜플:
if 조건:
continue
특정 값만 건너뛰기
# 성공: 특정 값 건너뛰기
nums = (1, 2, 3, 4)
for num in nums:
if num == 2:
continue
print(num)
# 1
# 3
# 4
# 성공: 짝수만 건너뛰기
nums = (1, 2, 3, 4, 5)
for num in nums:
if num % 2 == 0:
continue
print(num)
# 1
# 3
# 5
42. 튜플과 range()
tuple(range(시작, 끝))
range 값을 튜플로 만들기
# 성공: range를 튜플로 변환
nums = tuple(range(1, 6))
print(nums) # (1, 2, 3, 4, 5)
# 성공: 0부터 시작
nums = tuple(range(5))
print(nums) # (0, 1, 2, 3, 4)
# 주의: 끝 값은 포함되지 않음
nums = tuple(range(1, 5))
print(nums) # (1, 2, 3, 4)
43. 튜플과 range() step
tuple(range(시작, 끝, 간격))
간격을 정해서 숫자 튜플 만들기
# 성공: 2씩 증가
nums = tuple(range(0, 10, 2))
print(nums) # (0, 2, 4, 6, 8)
# 성공: 거꾸로 감소
nums = tuple(range(5, 0, -1))
print(nums) # (5, 4, 3, 2, 1)
# 주의: 간격이 0이면 에러 발생
nums = tuple(range(1, 5, 0)) # ValueError
44. 튜플과 문자열 split()
tuple(문자열.split())
문자열을 나눈 뒤 튜플로 변환
# 성공: 공백 기준으로 나누고 튜플 변환
text = "apple banana orange"
result = tuple(text.split())
print(result) # ('apple', 'banana', 'orange')
# 성공: 쉼표 기준으로 나누기
text = "red,green,blue"
result = tuple(text.split(","))
print(result) # ('red', 'green', 'blue')
# 주의: split() 결과는 원래 리스트
text = "a b c"
result = text.split()
print(result) # ['a', 'b', 'c']
print(type(result)) # <class 'list'>
45. 튜플과 join()
구분자.join(튜플)
문자열 튜플을 하나의 문자열로 합치기
# 성공: 문자열 튜플 합치기
words = ("hello", "python")
result = " ".join(words)
print(result) # hello python
# 성공: 쉼표로 합치기
fruits = ("apple", "banana", "orange")
print(",".join(fruits)) # apple,banana,orange
# 주의: 문자열이 아닌 값이 있으면 에러 발생
items = ("apple", 1, "banana")
",".join(items) # TypeError
46. 튜플과 map()
tuple(map(함수, 튜플))
튜플의 각 값에 함수를 적용
# 성공: 문자열 숫자를 정수로 변환
texts = ("1", "2", "3")
nums = tuple(map(int, texts))
print(nums) # (1, 2, 3)
# 성공: 각 값을 문자열로 변환
nums = (1, 2, 3)
texts = tuple(map(str, nums))
print(texts) # ('1', '2', '3')
# 주의: 변환할 수 없는 값이 있으면 에러
texts = ("1", "a", "3")
nums = tuple(map(int, texts)) # ValueError
47. 튜플과 filter()
tuple(filter(함수, 튜플))
조건에 맞는 값만 남기기
# 성공: 짝수만 남기기
nums = (1, 2, 3, 4, 5)
result = tuple(filter(lambda x: x % 2 == 0, nums))
print(result) # (2, 4)
# 성공: 빈 문자열 제거
items = ("apple", "", "banana", "")
result = tuple(filter(None, items))
print(result) # ('apple', 'banana')
# 주의: filter() 결과는 바로 튜플이 아님
nums = (1, 2, 3)
result = filter(lambda x: x > 1, nums)
print(result) # <filter object at ...>
print(tuple(result)) # (2, 3)
48. 튜플 컴프리헨션 주의
(x for x in 튜플)
소괄호 안 컴프리헨션은 튜플이 아니라 generator
# 주의: 튜플 컴프리헨션처럼 보이지만 generator
nums = (1, 2, 3)
result = (x * 2 for x in nums)
print(result) # <generator object ...>
print(type(result)) # <class 'generator'>
# 성공: 튜플로 만들려면 tuple() 사용
nums = (1, 2, 3)
result = tuple(x * 2 for x in nums)
print(result) # (2, 4, 6)
49. 튜플 정렬 후 다시 튜플로 변환
tuple(sorted(튜플))
정렬 결과를 튜플로 만들기
# 성공: 오름차순 정렬 후 튜플 변환
nums = (3, 1, 2)
result = tuple(sorted(nums))
print(result) # (1, 2, 3)
# 성공: 내림차순 정렬 후 튜플 변환
nums = (3, 1, 2)
result = tuple(sorted(nums, reverse=True))
print(result) # (3, 2, 1)
# 주의: 원본 튜플은 변경되지 않음
nums = (3, 1, 2)
result = tuple(sorted(nums))
print(nums) # (3, 1, 2)
print(result) # (1, 2, 3)
50. 튜플에서 값 교환
변수1, 변수2 = 변수2, 변수1
튜플 패킹과 언패킹으로 값 바꾸기
# 성공: 두 변수 값 교환
a = 10
b = 20
a, b = b, a
print(a) # 20
print(b) # 10
# 성공: 여러 변수도 가능
a = 1
b = 2
c = 3
a, b, c = c, a, b
print(a) # 3
print(b) # 1
print(c) # 2
51. 함수에서 튜플 반환
return 값1, 값2
함수에서 여러 값을 반환하면 튜플로 반환됨
# 성공: 여러 값 반환
def get_user():
return "Kim", 20
result = get_user()
print(result) # ('Kim', 20)
print(type(result)) # <class 'tuple'>
# 성공: 반환값 바로 언패킹
def get_point():
return 10, 20
x, y = get_point()
print(x) # 10
print(y) # 20
# 주의: 받는 변수 개수가 다르면 에러
def get_point():
return 10, 20
x, y, z = get_point() # ValueError
52. 튜플을 함수 인자로 풀기
함수(*튜플)
튜플 안의 값을 함수 인자로 전달
# 성공: 튜플을 인자로 풀어서 전달
def add(a, b):
return a + b
nums = (10, 20)
result = add(*nums)
print(result) # 30
# 성공: print()에도 사용 가능
items = ("apple", "banana", "orange")
print(*items) # apple banana orange
# 주의: 함수가 요구하는 인자 개수와 맞아야 함
def add(a, b):
return a + b
nums = (10, 20, 30)
add(*nums) # TypeError
53. 튜플을 딕셔너리 키로 사용
딕셔너리 = {튜플: 값}
변경 불가능한 튜플은 딕셔너리 키로 사용 가능
# 성공: 좌표를 튜플 키로 사용
locations = {
(0, 0): "start",
(1, 2): "point"
}
print(locations[(0, 0)]) # start
print(locations[(1, 2)]) # point
# 성공: 이름과 나이를 묶어서 키로 사용
users = {
("Kim", 20): "student",
("Lee", 30): "teacher"
}
print(users[("Kim", 20)]) # student
# 주의: 튜플 안에 리스트가 있으면 키로 사용 불가
key = ([1, 2], 3)
data = {key: "value"} # TypeError
54. 튜플을 set에 넣기
set.add(튜플)
변경 불가능한 튜플은 set 요소로 사용 가능
# 성공: 튜플을 set에 추가
points = set()
points.add((1, 2))
points.add((3, 4))
print(points) # {(1, 2), (3, 4)}
# 성공: 중복 튜플은 하나만 남음
points = set()
points.add((1, 2))
points.add((1, 2))
print(points) # {(1, 2)}
# 주의: 튜플 안에 리스트가 있으면 set에 넣을 수 없음
items = set()
items.add(([1, 2], 3)) # TypeError
55. 튜플과 딕셔너리 items()
딕셔너리.items()
딕셔너리의 key, value를 튜플처럼 꺼내기
# 성공: key, value 함께 꺼내기
scores = {"Kim": 90, "Lee": 80}
for item in scores.items():
print(item)
# ('Kim', 90)
# ('Lee', 80)
# 성공: key, value 바로 나눠 받기
scores = {"Kim": 90, "Lee": 80}
for name, score in scores.items():
print(name, score)
# Kim 90
# Lee 80
# 주의: items() 자체는 리스트가 아님
scores = {"Kim": 90, "Lee": 80}
result = scores.items()
print(result) # dict_items([('Kim', 90), ('Lee', 80)])
print(type(result)) # <class 'dict_items'>
56. 튜플과 리스트 비교
튜플 == 리스트
값이 같아 보여도 자료형이 다르면 다름
# 주의: 값은 같아 보여도 자료형이 다름
a = (1, 2, 3)
b = [1, 2, 3]
print(a == b) # False
# 성공: 변환 후 비교
a = (1, 2, 3)
b = [1, 2, 3]
print(a == tuple(b)) # True
print(list(a) == b) # True
57. 튜플 복사
새튜플 = 기존튜플
튜플은 변경 불가능하므로 그대로 공유해도 안전한 편
# 성공: 튜플 복사
a = (1, 2, 3)
b = a
print(a) # (1, 2, 3)
print(b) # (1, 2, 3)
# 성공: 같은 객체를 가리킬 수 있음
a = (1, 2, 3)
b = a
print(a is b) # True
# 주의: 안에 리스트가 있으면 내부 리스트는 변경 가능
a = ([1, 2], 3)
b = a
b[0].append(4)
print(a) # ([1, 2, 4], 3)
print(b) # ([1, 2, 4], 3)
58. 튜플에서 중복 제거
tuple(set(튜플))
튜플의 중복 값을 제거
# 성공: 중복 제거
nums = (1, 2, 2, 3, 3)
result = tuple(set(nums))
print(result) # 순서는 보장되지 않음
# 성공: 순서를 유지하며 중복 제거
nums = (1, 2, 2, 3, 3)
result = tuple(dict.fromkeys(nums))
print(result) # (1, 2, 3)
# 주의: set을 사용하면 순서가 바뀔 수 있음
nums = (3, 1, 2, 1)
result = tuple(set(nums))
print(result) # 순서가 원본과 다를 수 있음
59. 튜플에서 특정 값 개수 확인 후 사용
튜플.count(값)
값이 몇 번 나오는지 확인한 뒤 조건 처리
# 성공: 특정 값이 2개 이상인지 확인
nums = (1, 2, 2, 3)
if nums.count(2) >= 2:
print("2가 여러 개 있음") # 2가 여러 개 있음
# 성공: 값이 없는지 확인
nums = (1, 2, 3)
if nums.count(10) == 0:
print("10은 없음") # 10은 없음
# 주의: count()는 전체 튜플을 검사함
nums = (1, 2, 2, 2, 3)
print(nums.count(2)) # 3
60. 튜플에서 index() 안전하게 사용
if 값 in 튜플:
튜플.index(값)
값이 있는지 먼저 확인한 뒤 위치 찾기
# 성공: 값이 있을 때만 위치 찾기
nums = (10, 20, 30)
if 20 in nums:
print(nums.index(20)) # 1
# 성공: 값이 없을 때 처리
nums = (10, 20, 30)
if 100 in nums:
print(nums.index(100))
else:
print("값이 없음") # 값이 없음
# 주의: 확인 없이 index()를 쓰면 에러 가능
nums = (1, 2, 3)
nums.index(10) # ValueError
61. 튜플에서 여러 값 존재 확인
값1 in 튜플 and 값2 in 튜플
여러 값이 모두 있는지 확인
# 성공: 여러 값이 모두 있는지 확인
nums = (1, 2, 3, 4)
print(2 in nums and 4 in nums) # True
print(2 in nums and 10 in nums) # False
# 성공: 하나라도 있는지 확인
nums = (1, 2, 3, 4)
print(10 in nums or 3 in nums) # True
# 주의: and는 모두 True여야 True
nums = (1, 2, 3)
print(1 in nums and 10 in nums) # False
62. 튜플에서 all()로 여러 값 확인
all(값 in 튜플 for 값 in 확인값들)
확인할 값들이 모두 튜플 안에 있는지 검사
# 성공: 필요한 값이 모두 있는지 확인
nums = (1, 2, 3, 4)
required = (2, 4)
result = all(x in nums for x in required)
print(result) # True
# 성공: 하나라도 없으면 False
nums = (1, 2, 3, 4)
required = (2, 10)
print(all(x in nums for x in required)) # False
# 주의: required가 비어 있으면 True
nums = (1, 2, 3)
required = ()
print(all(x in nums for x in required)) # True
63. 튜플에서 any()로 여러 값 확인
any(값 in 튜플 for 값 in 확인값들)
확인할 값 중 하나라도 튜플 안에 있는지 검사
# 성공: 하나라도 있으면 True
nums = (1, 2, 3, 4)
targets = (10, 3)
result = any(x in nums for x in targets)
print(result) # True
# 성공: 하나도 없으면 False
nums = (1, 2, 3, 4)
targets = (10, 20)
print(any(x in nums for x in targets)) # False
# 주의: targets가 비어 있으면 False
nums = (1, 2, 3)
targets = ()
print(any(x in nums for x in targets)) # False
64. 튜플에서 조건에 맞는 첫 값 찾기
next((값 for 값 in 튜플 if 조건), 기본값)
조건에 맞는 첫 번째 값 가져오기
# 성공: 첫 번째 짝수 찾기
nums = (1, 3, 4, 6)
result = next((x for x in nums if x % 2 == 0), None)
print(result) # 4
# 성공: 조건에 맞는 값이 없으면 기본값 반환
nums = (1, 3, 5)
result = next((x for x in nums if x % 2 == 0), None)
print(result) # None
# 주의: 기본값이 없으면 조건 불만족 시 에러
nums = (1, 3, 5)
result = next(x for x in nums if x % 2 == 0) # StopIteration
65. 튜플에서 조건에 맞는 값만 튜플로 만들기
tuple(값 for 값 in 튜플 if 조건)
조건에 맞는 값만 골라 새 튜플 생성
# 성공: 짝수만 추출
nums = (1, 2, 3, 4, 5, 6)
result = tuple(x for x in nums if x % 2 == 0)
print(result) # (2, 4, 6)
# 성공: 길이가 5 이상인 문자열만 추출
words = ("hi", "apple", "banana")
result = tuple(word for word in words if len(word) >= 5)
print(result) # ('apple', 'banana')
# 주의: 조건에 맞는 값이 없으면 빈 튜플
nums = (1, 3, 5)
result = tuple(x for x in nums if x % 2 == 0)
print(result) # ()
66. 튜플에서 값 변환하기
tuple(변환식 for 값 in 튜플)
튜플 안의 값을 변환해서 새 튜플 생성
# 성공: 각 숫자에 10 더하기
nums = (1, 2, 3)
result = tuple(x + 10 for x in nums)
print(result) # (11, 12, 13)
# 성공: 문자열을 대문자로 변환
words = ("apple", "banana")
result = tuple(word.upper() for word in words)
print(result) # ('APPLE', 'BANANA')
# 주의: 원본 튜플은 변경되지 않음
nums = (1, 2, 3)
result = tuple(x * 2 for x in nums)
print(nums) # (1, 2, 3)
print(result) # (2, 4, 6)
67. 튜플에서 인덱스와 값을 함께 새 튜플로 만들기
tuple(enumerate(튜플))
각 값에 인덱스를 붙여 튜플로 만들기
# 성공: 인덱스와 값을 튜플로 묶기
fruits = ("apple", "banana", "orange")
result = tuple(enumerate(fruits))
print(result) # ((0, 'apple'), (1, 'banana'), (2, 'orange'))
# 성공: 시작 번호 지정
fruits = ("apple", "banana")
result = tuple(enumerate(fruits, start=1))
print(result) # ((1, 'apple'), (2, 'banana'))
# 주의: enumerate() 결과는 바로 튜플이 아님
fruits = ("apple", "banana")
result = enumerate(fruits)
print(result) # <enumerate object at ...>
print(tuple(result)) # ((0, 'apple'), (1, 'banana'))
68. 두 튜플을 zip()으로 묶어 새 튜플 만들기
tuple(zip(튜플1, 튜플2))
두 튜플의 값을 순서대로 짝지어 튜플 생성
# 성공: 이름과 점수 묶기
names = ("Kim", "Lee", "Park")
scores = (90, 80, 70)
result = tuple(zip(names, scores))
print(result) # (('Kim', 90), ('Lee', 80), ('Park', 70))
# 성공: 세 개 튜플도 묶기 가능
names = ("Kim", "Lee")
ages = (20, 30)
cities = ("Seoul", "Busan")
result = tuple(zip(names, ages, cities))
print(result) # (('Kim', 20, 'Seoul'), ('Lee', 30, 'Busan'))
# 주의: 길이가 다르면 짧은 튜플 기준
a = (1, 2, 3)
b = ("a", "b")
result = tuple(zip(a, b))
print(result) # ((1, 'a'), (2, 'b'))
69. zip()으로 묶인 튜플 다시 분리하기
tuple(zip(*묶인튜플))
묶여 있는 튜플을 다시 열 기준으로 분리
# 성공: 묶인 튜플 분리
data = (("Kim", 90), ("Lee", 80), ("Park", 70))
names, scores = zip(*data)
print(names) # ('Kim', 'Lee', 'Park')
print(scores) # (90, 80, 70)
# 성공: 세 값도 분리 가능
data = (("Kim", 20, "Seoul"), ("Lee", 30, "Busan"))
names, ages, cities = zip(*data)
print(names) # ('Kim', 'Lee')
print(ages) # (20, 30)
print(cities) # ('Seoul', 'Busan')
# 주의: 빈 튜플을 분리하면 에러 발생
data = ()
names, scores = zip(*data) # ValueError
70. 튜플을 딕셔너리로 변환
dict(튜플)
(key, value) 형태의 튜플을 딕셔너리로 변환
# 성공: 튜플을 딕셔너리로 변환
items = (("name", "Kim"), ("age", 20))
result = dict(items)
print(result) # {'name': 'Kim', 'age': 20}
# 성공: zip 결과도 딕셔너리 변환 가능
keys = ("name", "age")
values = ("Lee", 30)
result = dict(zip(keys, values))
print(result) # {'name': 'Lee', 'age': 30}
# 주의: 각 요소가 key, value 2개 구조여야 함
items = (("name", "Kim"), ("age", 20, "extra"))
dict(items) # ValueError
71. 튜플을 문자열로 변환
str(튜플)
튜플 전체를 문자열 형태로 변환
# 성공: 튜플을 문자열로 변환
nums = (1, 2, 3)
result = str(nums)
print(result) # (1, 2, 3)
print(type(result)) # <class 'str'>
# 성공: 문자열 튜플도 변환 가능
fruits = ("apple", "banana")
print(str(fruits)) # ('apple', 'banana')
# 주의: 요소를 합치는 것이 아니라 튜플 모양 그대로 문자열이 됨
nums = (1, 2, 3)
print(str(nums)) # (1, 2, 3)
72. 튜플 요소를 문자열로 합치기
구분자.join(map(str, 튜플))
튜플 안의 값을 문자열로 바꾼 뒤 합치기
# 성공: 숫자 튜플을 문자열로 합치기
nums = (1, 2, 3)
result = ", ".join(map(str, nums))
print(result) # 1, 2, 3
# 성공: 문자열 튜플 합치기
words = ("hello", "python")
result = " ".join(words)
print(result) # hello python
# 주의: join()은 문자열만 합칠 수 있음
nums = (1, 2, 3)
",".join(nums) # TypeError
73. 튜플에서 특정 위치 값 바꾼 새 튜플 만들기
튜플[:위치] + (새값,) + 튜플[위치+1:]
원본 튜플은 변경하지 않고 새 튜플 생성
# 성공: 1번 위치 값 바꾸기
nums = (10, 20, 30)
result = nums[:1] + (99,) + nums[2:]
print(result) # (10, 99, 30)
# 성공: 첫 번째 값 바꾸기
nums = (1, 2, 3)
result = (100,) + nums[1:]
print(result) # (100, 2, 3)
# 주의: 원본 튜플은 그대로 유지됨
nums = (10, 20, 30)
result = nums[:1] + (99,) + nums[2:]
print(nums) # (10, 20, 30)
print(result) # (10, 99, 30)
74. 튜플 앞에 값 추가한 새 튜플 만들기
(값,) + 튜플
튜플 맨 앞에 값을 추가한 새 튜플 생성
# 성공: 맨 앞에 값 추가
nums = (2, 3)
result = (1,) + nums
print(result) # (1, 2, 3)
# 성공: 문자열 값 추가
fruits = ("banana", "orange")
result = ("apple",) + fruits
print(result) # ('apple', 'banana', 'orange')
# 주의: 한 개짜리 튜플은 쉼표 필요
nums = (2, 3)
result = (1) + nums # TypeError
75. 튜플 뒤에 값 추가한 새 튜플 만들기
튜플 + (값,)
튜플 맨 뒤에 값을 추가한 새 튜플 생성
# 성공: 맨 뒤에 값 추가
nums = (1, 2)
result = nums + (3,)
print(result) # (1, 2, 3)
# 성공: 문자열 값 추가
fruits = ("apple", "banana")
result = fruits + ("orange",)
print(result) # ('apple', 'banana', 'orange')
# 주의: 한 개짜리 튜플은 쉼표 필요
nums = (1, 2)
result = nums + (3) # TypeError
76. 튜플에서 특정 값 제거한 새 튜플 만들기
tuple(x for x in 튜플 if x != 제거값)
특정 값과 다른 값만 모아 새 튜플 생성
# 성공: 특정 값 제거
nums = (1, 2, 3, 2, 4)
result = tuple(x for x in nums if x != 2)
print(result) # (1, 3, 4)
# 성공: 문자열 값 제거
fruits = ("apple", "banana", "apple")
result = tuple(x for x in fruits if x != "apple")
print(result) # ('banana',)
# 주의: 같은 값이 모두 제거됨
nums = (1, 2, 2, 3)
result = tuple(x for x in nums if x != 2)
print(result) # (1, 3)
77. 튜플에서 첫 번째 특정 값만 제거
위치 = 튜플.index(값)
튜플[:위치] + 튜플[위치+1:]
첫 번째로 찾은 값 하나만 제거한 새 튜플 생성
# 성공: 첫 번째 2만 제거
nums = (1, 2, 2, 3)
index = nums.index(2)
result = nums[:index] + nums[index + 1:]
print(result) # (1, 2, 3)
# 성공: 값이 있을 때만 제거
nums = (1, 2, 3)
if 2 in nums:
index = nums.index(2)
result = nums[:index] + nums[index + 1:]
else:
result = nums
print(result) # (1, 3)
# 주의: 값이 없으면 index()에서 에러 발생
nums = (1, 2, 3)
index = nums.index(10) # ValueError
78. 튜플에서 특정 위치 값 제거
튜플[:위치] + 튜플[위치+1:]
원하는 위치의 값을 제거한 새 튜플 생성
# 성공: 1번 위치 값 제거
nums = (10, 20, 30)
result = nums[:1] + nums[2:]
print(result) # (10, 30)
# 성공: 첫 번째 값 제거
nums = (1, 2, 3)
result = nums[1:]
print(result) # (2, 3)
# 주의: 원본 튜플은 변경되지 않음
nums = (10, 20, 30)
result = nums[:1] + nums[2:]
print(nums) # (10, 20, 30)
print(result) # (10, 30)
79. 튜플에서 마지막 값 제거
튜플[:-1]
마지막 값을 제외한 새 튜플 생성
# 성공: 마지막 값 제거
nums = (1, 2, 3)
result = nums[:-1]
print(result) # (1, 2)
# 성공: 문자열 튜플도 가능
fruits = ("apple", "banana", "orange")
print(fruits[:-1]) # ('apple', 'banana')
# 주의: 빈 튜플에서 사용해도 에러는 없음
empty = ()
print(empty[:-1]) # ()
80. 튜플에서 첫 번째 값 제거
튜플[1:]
첫 번째 값을 제외한 새 튜플 생성
# 성공: 첫 번째 값 제거
nums = (1, 2, 3)
result = nums[1:]
print(result) # (2, 3)
# 성공: 한 개짜리 튜플이면 빈 튜플
nums = (1,)
print(nums[1:]) # ()
# 주의: 원본 튜플은 변경되지 않음
nums = (1, 2, 3)
result = nums[1:]
print(nums) # (1, 2, 3)
print(result) # (2, 3)
81. 튜플 안의 튜플 평탄화
tuple(값 for 안쪽튜플 in 튜플 for 값 in 안쪽튜플)
중첩된 튜플을 한 단계 풀어서 새 튜플 생성
# 성공: 중첩 튜플 평탄화
data = ((1, 2), (3, 4), (5, 6))
result = tuple(x for inner in data for x in inner)
print(result) # (1, 2, 3, 4, 5, 6)
# 성공: 문자열 튜플도 가능
data = (("a", "b"), ("c", "d"))
result = tuple(x for inner in data for x in inner)
print(result) # ('a', 'b', 'c', 'd')
# 주의: 한 단계만 평탄화됨
data = (((1, 2),), ((3, 4),))
result = tuple(x for inner in data for x in inner)
print(result) # ((1, 2), (3, 4))
82. 튜플 안 리스트 평탄화
tuple(값 for 리스트 in 튜플 for 값 in 리스트)
튜플 안에 들어 있는 리스트들을 한 튜플로 합치기
# 성공: 튜플 안 리스트 평탄화
data = ([1, 2], [3, 4])
result = tuple(x for inner in data for x in inner)
print(result) # (1, 2, 3, 4)
# 성공: 문자열 리스트도 가능
data = (["a", "b"], ["c", "d"])
result = tuple(x for inner in data for x in inner)
print(result) # ('a', 'b', 'c', 'd')
# 주의: 안쪽 요소가 반복 가능해야 함
data = ([1, 2], 3)
result = tuple(x for inner in data for x in inner) # TypeError
'🐍Python' 카테고리의 다른 글
| Python Basic: set (0) | 2026.05.28 |
|---|---|
| Python Basic: dict (0) | 2026.05.28 |
| Python Basic: list (0) | 2026.05.28 |
| Python Basic: String (0) | 2026.05.28 |
