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
  • 전체
    오늘
    어제
    • 분류 전체보기 (83) N
      • 💭Retrospective (21)
      • 🥕FrontEnd (0)
      • 🐬MySQL (2) N
      • 🐍Python (5)
      • 🍃SpringBoot (33) N
      • ☕Java (1)
      • ♾️Devops (1)
      • 🌎Network (2)
      • 📚Read & 👨‍🏫Course (10)
      • Programmers (1)
      • 🧪Test (7)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    한빛미디어
    MySQL
    IoC
    서평단
    DI
    책
    한빛아카데미
    Python
    distributed lock
    gradle
    Concurrency
    Mockito
    Spring
    optimistic rock
    나는리뷰어다
    spring boot
    jwt
    redis
    junit
    회고
  • 최근 댓글

  • 최근 글

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

티스토리툴바