Python Basic: tuple

2026. 5. 28. 21:54·🐍Python

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
'🐍Python' 카테고리의 다른 글
  • Python Basic: set
  • Python Basic: dict
  • Python Basic: list
  • Python Basic: String
limdaeil
limdaeil
limdaeil 님의 블로그 입니다.
  • limdaeil
    limdaeil
    limdaeil
  • 전체
    오늘
    어제
    • 분류 전체보기 (50) N
      • 💭Retrospective (16)
      • 🐬MySQL (1)
      • 🐍Python (5)
      • 🍃SpringBoot (14) N
      • ♾️Devops (1)
      • 🌎Network (2)
      • 📚Read & 👨‍🏫Course (10)
      • 🥕Fortinet (0)
      • Programmers (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    jwt
    클린 아키텍처 with 파이썬
    redis
    이것이 스프링 AI다
    mcp
    나는리뷰어다
    서평단
    Python
    MySQL
    회고
    optimistic rock
    distributed lock
    한빛미디어
    spring boot
    레이스 컨디션
    HttpMessageConverter
    맛있는 디자인 피그마 With AI
    Concurrency
    gradle
    한빛아카데미
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
limdaeil
Python Basic: tuple
상단으로

티스토리툴바