🐍 Python/🐍 기초 문법

파이썬 기초 : 튜플(Tuple)

itstory(Booho) 2025. 1. 19. 19:55
728x90

리스트(List)의 개념 및 특징

  1. 정의
    • 파이썬에서 가장 기본적인 시퀀스(Sequence) 자료형 중 하나로, 여러 요소(값)를 순서 있게 저장할 수 있습니다.
    • 대괄호([ ])를 사용하여 만들고, 내부 요소들은 콤마(,)로 구분합니다.
  2. 특징
    • 가변(Mutable): 생성된 이후에도 요소를 자유롭게 추가, 삭제, 변경할 수 있습니다.
    • 순서(Ordered) 보장: 입력된 순서대로 요소가 유지되며, 인덱스로 접근할 수 있습니다.
    • 중복 요소를 허용합니다.
    • 각 요소들은 서로 다른 자료형(정수, 문자열, 불리언, 객체 등)을 가질 수 있습니다.
  3. 활용 사례
    • 순차적인 데이터 관리 (예: 학급 명단, 주문 목록 등)
    • 반복문을 통해 데이터 처리 (예: for문을 이용한 데이터 가공)
    • 필요에 따라 리스트 내 요소를 정렬하거나, 슬라이싱(부분만 추출)하여 가공 등에 사용할 수 있습니다.

리스트 생성 및 초기화

빈 리스트 생성

 

초기값이 있는 리스트 생성

 
중첩 리스트(Nested List)
  • 리스트 안에 다른 리스트를 요소로 가질 수 있습니다.


리스트 접근 및 슬라이싱

인덱스(Index) 접근

  • 리스트의 인덱스는 0부터 시작합니다.
  • 음수 인덱스를 사용하면, 뒤에서부터 요소에 접근할 수 있습니다. (예: -1은 마지막 요소)

슬라이싱(Slicing)

  • 리스트의 특정 구간을 추출하기 위해 슬라이싱 문법을 사용합니다.
  • 리스트[start:end:step] 형태로, start 인덱스부터 end-1 인덱스까지 step 간격으로 요소를 추출합니다.
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(numbers[2:5])   # [2, 3, 4]  (인덱스 2부터 4까지)
print(numbers[:4])    # [0, 1, 2, 3] (처음부터 인덱스 3까지)
print(numbers[6:])    # [6, 7, 8, 9] (인덱스 6부터 끝까지)
print(numbers[::2])   # [0, 2, 4, 6, 8] (2칸씩 건너뛰며 추출)
print(numbers[::-1])  # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (역순)


 

리스트 주요 메서드 및 기능

아래는 리스트에서 자주 사용하는 메서드와 기능, 간단한 예시를 정리한 내용입니다.

 

추가(Add)

1. append(value)

리스트의 맨 뒤에 요소를 추가합니다.

 

2. insert(index, value)

지정한 위치(index)에 요소를 추가합니다.

 
3. 리스트 확장 (extend 또는 + 연산자)
다른 리스트(또는 반복 가능한 객체)의 모든 요소를 현재 리스트에 이어붙이는 메서드.

 

삭제(Remove)

1. pop(index=-1)

리스트의 마지막 요소(또는 지정 인덱스의 요소)를 꺼내면서 삭제하고, 그 값을 반환합니다.

2. remove(value)
리스트에서 해당 값을 가진 첫 번째 요소를 찾아 삭제합니다.
 
3. del 리스트[index]
특정 인덱스의 요소를 삭제합니다.

 

4. clear()
리스트의 모든 요소를 제거하여 빈 리스트로 만듭니다.

정렬(Sort) 및 기타 메서드

  1. sort(), sorted()
    • 리스트를 오름차순으로 정렬합니다. (기본적으로 알파벳 순 또는 숫자 오름차순)
    • sort(reverse=True)로 내림차순 정렬 가능
    • sorted(리스트)는 정렬된 새로운 리스트를 반환하고, 원본은 그대로 유지합니다.
  2. index(value)
    • 리스트에서 해당 값을 가진 첫 번째 요소의 인덱스를 반환합니다.
  3. count(value)
    • 리스트 내에서 특정 값이 등장하는 횟수를 반환합니다.
  4. reverse()
    • 리스트의 순서를 뒤집습니다. (단순 역순, 정렬과는 다른 개념)

리스트 활용 예제

리스트를 사용한 합계, 평균 구하기

 

 

리스트 컴프리헨션(List Comprehension)

짧고 간결한 문법으로 리스트 생성 및 가공이 가능합니다.

 

 

- 기본적인 제곱수 리스트 생성

     [i**2** for i in range(10)] : 이 부분이 list comprehension 입니다.

     for i in range(10) : 0부터 9까지의 숫자를 i에 순서대로 할당합니다.( 자바에서 배운 포문과 비슷 합니다.)

     i**2 : 각 i에 대해 제곱을 계산합니다.

     [] : 계산된 결과를 리스트로 만듭니다.print(squares): 생성된 리스트를 출력합니다.

 

- 짝수 제곱수만 추출하기

     if i % 2 == 0 : 이 부분이 추가되어 짝수 조건을 검사합니다.

     i % 2 == 0 : i를 2로 나눈 나머지가 0이면 True (짝수)를 의미합니다.

     전체 로직 : 0부터 9까지의 숫자 중 짝수인 숫자만 골라 제곱하고, 그 결과를 리스트에 담습니다.

 

 

 

중첩 리스트 다루기

 


주요 메서드 및 기능 표 (요약)

메서드 / 기능 설명 예시 (코드 / 결과)
생성 대괄호 [...]로 리스트 생성 my_list = [1, 2, 3]
인덱스 접근 리스트[index]로 접근 my_list[0] → 첫 번째 요소
슬라이싱(Slicing) [start:end:step]로 부분 추출 my_list[1:4] → 인덱스 1~3 까지
append(value) 맨 뒤에 요소 추가 my_list.append(4) → [1, 2, 3, 4]
insert(index, value) 특정 인덱스 위치에 요소 추가 my_list.insert(1, 99) → [1, 99, 2, 3]
extend(iterable) 다른 리스트나 반복 가능한 객체를 이어 붙임 my_list.extend([5, 6]) → [1, 2, 3, 5, 6]
pop(index=-1) 마지막 요소(또는 특정 인덱스)를 꺼내면서 삭제 x = my_list.pop() → x가 꺼낸 값, 리스트에서 제거됨
remove(value) 해당 값을 가진 첫 번째 요소를 삭제 my_list.remove(2)
del 리스트[index] 특정 인덱스 요소를 삭제 del my_list[0]
clear() 모든 요소를 제거 (빈 리스트가 됨) my_list.clear() → []
sort() / sorted() 오름차순 정렬 (reverse=True로 내림차순 가능) my_list.sort()
sorted_list = sorted(my_list)
index(value) 해당 값의 첫 번째 인덱스를 반환 my_list.index(10)
count(value) 해당 값이 리스트에 몇 번 들어있는지 반환 my_list.count(2)
reverse() 리스트의 순서를 뒤집음 (역순) my_list.reverse()
리스트 컴프리헨션 [표현식 for 변수 in 반복객체 if 조건] 형태의 축약 문법 [x**2 for x in range(5)] → [0, 1, 4, 9, 16]

 

 

튜플(Tuple)의 개념 및 특징

  1. 정의
    • 여러 개의 값을 순서대로 저장하는 점에서는 리스트와 유사하지만, 생성된 후에 값을 변경(추가·삭제·수정)할 수 없는 자료형입니다.
    • 보통 소괄호(( ))를 사용하여 생성하며, 내부 요소들은 콤마(,)로 구분합니다.
  2. 특징
    • 불변(Immutable): 생성된 튜플은 그 안의 요소들을 변경할 수 없습니다.
    • 순서(Ordered) 보장: 저장된 값들이 입력된 순서를 유지하며, 인덱스(index)를 통해 접근할 수 있습니다.
    • 중복 요소 허용: 같은 값을 여러 번 가질 수 있습니다.
    • 각 요소들은 서로 다른 **자료형(정수, 문자열, 불리언, 리스트 등)**을 가질 수 있습니다.
    • 리스트보다 메모리를 조금 더 효율적으로 사용할 수 있으며, 자료를 읽는 속도가 빠르고, 변경 불가능한 자료를 다룰 때 유용합니다.
  3. 활용 사례
    • 변경이 없어야 하는 데이터를 안전하게 유지(예: 좌표, 연산 결과, 설정 값 등).
    • 함수에서 여러 개의 값을 한 번에 반환하고 싶을 때.
    • 다른 컬렉션의 로 사용해야 할 때(예: 딕셔너리 키), 요소가 변경되지 않으므로 안전.

튜플 생성 및 초기화

 

  1. 빈 튜플 생성
  2. 초기값이 있는 튜플
     
  3. 괄호 생략 가능
    • 콤마로 구분하기만 해도 튜플이 됩니다.

  4. 하나의 요소만 가진 튜플
    • 요소 하나만 있을 때는 반드시 뒤에 콤마를 붙여야 튜플로 인식합니다.

튜플 접근 및 언패킹(Unpacking)

  1. 인덱스(Index) 접근
    • 리스트와 마찬가지로 0부터 시작하며, 음수 인덱스도 사용 가능합니다.
     
  2. 슬라이싱(Slicing)
    • 튜플[start:end:step] 형태로 특정 범위를 추출합니다.

  3. 언패킹(Unpacking)
    • 튜플의 요소를 여러 변수에 한 번에 할당할 수 있습니다.
  4. 확장 언패킹(Extended Unpacking)
    • *를 사용하여 나머지 요소를 리스트로 받는 언패킹이 가능합니다.

 


 

튜플의 불변성(Immutable)과 그 의미

  • 튜플은 한 번 생성하면 내부 요소를 변경할 수 없습니다.
  • 예를 들어, 아래 코드는 에러를 발생시킵니다.

  • 이러한 특징 덕분에, 안정적으로 데이터를 유지하거나, 딕셔너리의 키집합(set)의 원소 같은 위치에서 활용이 가능합니다.

튜플의 주요 메서드 및 기능

튜플은 변경이 불가능하기 때문에, 리스트가 제공하는 대부분의 메서드(append, insert 등)은 사용할 수 없습니다.
하지만 다음과 같은 메서드는 사용할 수 있습니다.

  1. count(value)
    • 튜플 내에 해당 값이 몇 개 있는지 반환합니다.

  2. index(value)
    • 해당 값이 가장 처음 등장하는 인덱스를 반환합니다. (찾지 못하면 오류 발생)

  3. 슬라이싱, 언패킹
    • 이미 앞에서 소개했듯, 시퀀스 자료형이 가진 기본 기능들은 대부분 사용할 수 있습니다.

 

 

 

튜플 활용 예제

  1. 함수에서 여러 개의 값 반환

  2. 데이터 교환(Swap)하기
    • 파이썬에서는 튜플 언패킹을 이용해 변수 간 값을 쉽게 교환할 수 있습니다.

  3. 변경 불가능한 시퀀스가 필요한 경우
    • 예: 좌표(x, y), RGB 색상값 등을 튜플로 표현.

  4. 딕셔너리의 키로 사용
    • 리스트는 가변적이라 키로 사용할 수 없지만, 튜플은 불변이므로 키로 사용 가능.

코드설명 펼쳐보기

더보기

코드 설명

  1. 함수 정의 (def get_user_info()):
    • get_user_info라는 이름의 함수를 정의합니다.
    • 이 함수는 사용자의 정보를 반환하는 역할을 합니다.
  2. 변수 할당 및 초기화:
    • 함수 내부에서 세 개의 변수를 정의하고 값을 할당합니다:
      • name: 문자열 "Bob"을 저장.
      • age: 정수 22를 저장.
      • city: 문자열 "Busan"을 저장.
  3. 값 반환:
    • 함수가 세 값을 반환합니다.
    • Python에서는 쉼표로 나열된 값들이 튜플(tuple) 형태로 반환됩니다.
      • 이 경우, 반환되는 값은 ("Bob", 22, "Busan")입니다.
  4. 함수 호출 및 값 분해 (unpacking):
    • get_user_info()를 호출하여 반환된 튜플을 변수에 할당합니다.
    • 튜플 언패킹을 사용하여 반환된 튜플의 각 요소를 각각 user_name, user_age, user_city에 저장합니다:
      • user_name = "Bob"
      • user_age = 22
      • user_city = "Busan"
  5. 출력:
    • 언패킹된 변수들을 출력합니다.
    • 출력 결과는 다음과 같습니다:
      복사편집

      Bob 22 Busan

 


핵심 개념

  • 튜플 반환: 함수에서 여러 값을 반환할 때 튜플을 사용하면 간단하고 효율적입니다.
  • 튜플 언패킹: 반환된 튜플의 요소를 개별 변수로 쉽게 분리하여 사용할 수 있습니다.

튜플 주요 메서드 및 기능 표 (요약)

메서드 기능설명 예시 (코드 / 결과)
생성 괄호 ( )로 생성, 콤마로 요소 구분 my_tuple = (1, 2, 3) / single = (42,)
인덱스 접근 튜플[index] fruits[0] → "apple"
슬라이싱(Slicing) [start:end:step] numbers[1:3] → 해당 범위의 부분 튜플
언패킹(Unpacking) 튜플을 여러 변수에 나눠 담기 (name, age, city) = person
count(value) 해당 값의 개수를 세어 반환 my_tuple.count(2)
index(value) 해당 값의 첫 번째 인덱스 반환 my_tuple.index(10)
불변(Immutable) 생성 후 요소 변경이 불가능 my_tuple[0] = 999 → 에러
괄호 생략 튜플 생성 시 괄호는 선택적 (콤마로 구분 시) my_tuple2 = 1, 2, 3 → (1, 2, 3)
확장 언패킹 *을 사용하여 나머지 요소를 리스트로 받기 a, *rest = (1, 2, 3, 4) → a=1, rest=[2, 3, 4]



728x90
반응형