여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조를 의미합니다. 이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해줍니다. 파이썬에서는 리스트, 튜플, 세트, 딕셔너리 등이 기본적인 컬렉션 타입에 속합니다.

리스트(List)는 여러 개의 데이터를 하나의 변수에 순서대로 저장할 수 있는 Python의 대표적인 컬렉션 자료형으로, 대괄호([])를 사용해 생성합니다. 각 요소는 인덱스를 통해 접근할 수 있으며, 서로 다른 자료형의 값을 함께 저장할 수 있고, 요소의 추가·수정·삭제가 가능한 mutable(변경 가능한) 구조를 가집니다. 이러한 특징으로 인해 리스트는 데이터를 묶어서 관리하거나 반복 처리할 때 매우 유용하게 사용됩니다.

typedef struct {
PyObject_HEAD // 공통 필드: 참조 횟수, 타입 정보 포함!
Py_ssize_t ob_size; // 리스트의 길이
PyObject **ob_item; // 실제 아이템 배열 포인터
Py_ssize_t allocated; // 할당된 배열 용량
} PyListObject;
li1 = [1, 3, 5, 7, 9]
print(li1)
print(type(li1))
li2 = list([1, 3, 5, 7, 9])
print(li2)
print(type(li2))
li3 = ['김사과', '반하나', '오렌지', '이메론']
print(li3)
li4 = [1, 50.5, '김사과', True] # 각자 타입이 다른 데이터를 저장
print(li4)
print(type(li4))
print(li4[0])
print(type(li4[0]))
print(li4[0])
print(li4[1])
print(li4[2])
print(li4[3])
# print(li4[4]) # IndexError: list index out of range
print(type(li4[0]))
print(type(li4[1]))
print(type(li4[2]))
print(type(li4[3]))
리스트의 각 항목은 위치(인덱스)를 가지고 있으며, 인덱스를 사용하여 접근할 수 있습니다. 인덱스는 0부터 시작합니다.
li1 = [1, 3, 5, 7, 9]
print(li1)
print(li1[0])
print(li1[-1])
print(li1[0] + li1[-1])
li2 = [1, 2, '파이썬', ['김사과', '오렌지']]
print(li2)
print(type(li2))
print(li2[1])
print(type(li2[1]))
print(li2[3])
print(type(li2[3]))
print(li2[3][1])
print(type(li2[3][1]))
li3 = [1, 2, 3, ['김사과', '오렌지', '반하나', ['🍟','🌭','🥩','🍗']]]
print(li3)
print(li3[2])
print(li3[-1])
print(li3[-1][-2])
print(li3[-1][-1][-2])
print(li3[-1][-1][-1])
리스트의 일부분만을 추출할 수 있습니다.
리스트[start:end:step]
li1 = [10, 20, 30, 40, 50]
print(li1)
print(li1[0:3])
li2 = li1
print(li2)
li2[0] = 100
print(li2)
print(li1)
li3 = [1, 2, 3, ['김사과', '오렌지', '반하나', ['🍟','🌭','🥩','🍗']]]
print(li3[2:3])
print(li3[3][:2])
li4 = [10, 20, 30, 40, 50]
# 슬라이싱을 이용하여 요소를 추가한 경우 리스트에 데이터만 포함
li4[1:2] = ['😁','😂','😎','😍']
print(li4)
li4 = [10, 20, 30, 40, 50]
# 인덱싱을 이용하여 요소를 추가한 경우 리스트 안에 리스트를 만들고 포함
li4[1] = ['😁','😂','😎','😍']
print(li4)
li4 = [10, 20, 30, 40, 50]
print(li4[1:3])
li4[1:3] = [] # 빈 리스트를 슬라이싱을 통해 저장하면 해당 요소가 삭제됨
print(li4)
li4 = [10, 20, 30, 40, 50]
print(li4[1:2])
print(li4[1])
li4[1] = []
print(li4)
li4 = [10, 20, 30, 40, 50]
print(li4)
del li4[1]
print(li4)
리스트 간의 + 연산으로 리스트를 결합할 수 있고, * 연산으로 리스트를 반복할 수 있습니다.
li5 = [10, 20, 30]
li6 = [40, 50, 60]
print(li5 + li6)
print(li6 + li5)
li5 = [10, 20, 30]
li6 = li5 + [40, 50, 60] # [10, 20, 30] + [40, 50, 60]
print(li6)
li6 = [10, 20, 30]
li6 += [40, 50, 60] # li6 = li6 + [40, 50, 60]
print(li6)
li6 = [10, 20, 30]
print(li6 * 3)
리스트를 다루기 위한 여러 함수와 메소드들이 있습니다.
# len(): 객체의 길이를 반환하는 파이썬의 기본 내장 함수
li6 = [10, 20, 30]
print(len(li6))
# append(): 리스트 요소의 끝에 새로운 요소를 추가
li6 = [10, 20, 30]
print(li6)
li6.append(100)
print(li6)
# li6.append(200, 300)
li6.append([200, 300])
print(li6)
# extend(): 리스트 요소의 끝에 새로운 여러 요소를 추가
li6 = [10, 20, 30]
print(li6)
# li6.extend(100)
li6.extend([100])
print(li6)
li6.extend([200, 300, 400])
print(li6)
# pop(): 리스트 마지막 요소를 삭제하고 삭제된 요소를 반환
li6 = [10, 20, 30]
print(li6)
# print(li6.pop())
temp = li6.pop()
print(li6)
print(temp)
# index(): 리스트에서 특정 요소의 값 인덱스를 반환
li6 = [10, 20, 30]
print(li6)
print(li6.index(30))
# print(li6.index(100)) # 값이 없으면 에러
# reverse(): 리스트의 요소들의 순서를 반대로 설정
li7 = [100, 50, 70, 60, 20]
print(li7)
li7.reverse()
print(li7)
# 슬라이싱을 사용하여 리스트의 요소들의 순서를 반대로 설정하는 방법
li7 = [100, 50, 70, 60, 20]
print(li7[:]) # [0:5]
print(li7[0:5])
print(li7[::]) # step이 생략
print(li7[0:5:1]) # step의 기본값은 1
print(li7[0:5:2]) # step을 2로 설정
li7 = [100, 50, 70, 60, 20]
print(li7[::-1])
# step이 -1일 경우 start의 기본값은 length-1, end의 기본값은 -1으로 설정
print(li7[-1::-1])
print(li7[4::-1])
print(li7[4:None:-1])

# sort(): 리스트의 요소를 오름차순으로 정렬
li7 = [100, 50, 70, 60, 20]
print(li7)
li7.sort()
print(li7)
# sort(reverse=True): 리스트의 요소를 내림차순으로 정렬
li7.sort(reverse=True)
print(li7)
li8 = ['Apple', 'apple', 'orange', 'banana', 'melon']
li8.sort()
print(li8)
li9 = ['김사과', '오렌지', '반하나', '이메론', '배애리']
li9.sort()
print(li9)
# sorted(): 모든 요소를 정렬한 후 반환해주는 함수
li7 = [100, 50, 70, 60, 20]
print(li7)
result = sorted(li7)
print(li7)
print(result)
# count(): 리스트에서 특정 요소의 갯수를 반환
li9 = [10, 20, 30, 50, 20, 40, 30, 20]
print(li9)
print(li9.count(20))
print(li9.count(100))
여러 가지 데이터 타입의 값을 저장할 수 있는, 변경 불가능(immutable)한 순서가 있는 컬렉션입니다. 튜플은 괄호 ()를 사용하여 생성하고, 항목들은 쉼표 ,로 구분됩니다.
tu1 = ()
print(tu1)
print(type(tu1))
tu1 = (1,) # 요소가 1개일 경우 끝에 콤마를 꼭! 붙여야 함
print(tu1)
print(type(tu1))
tu2 = (1, 3, 5, 7)
print(tu2)
print(type(tu2))
tu3 = tuple([1, 3, 5, 7])
print(tu3)
print(type(tu3))
li3 = list(tu3)
print(li3)
print(type(li3))
tu4 = 1, 3, 5, 7
print(tu4)
print(type(tu4))
num1 = 10
num2 = 20
num3 = 30
tu4 = num1, num2, num3
print(tu4)
result1, result2, result3 = tu4
print(result1)
print(result2)
print(result3)
tu5 = ('apple', 'banana', ('🍎', '🍌'))
print(tu5)
print(type(tu5))
print(tu5[0])
print(type(tu5[0]))
print(tu5[2][0])
print(type(tu5[2][0]))
tu5 = ('apple', 'banana', ('🍎', '🍌'))
# tu5[0] = 'orange' # TypeError: 'tuple' object does not support item assignment
tu5 = 'orange'
print(tu5)
tu5 = ('apple', 'banana', ['🍎', '🍌'])
print(tu5)
print(type(tu5))
print(tu5[2])
print(type(tu5[2]))
tu5[2][0] = '❤'
print(tu5)
# tu5[2] = '🎃' # TypeError: 'tuple' object does not support item assignment
# 튜플의 슬라이싱은 결과도 튜플로 반환
tu6 = (1, 2, 'apple', 'banana')
print(tu6[1:])
print(tu6[1:3])
튜플은 sort() 메서드를 제공하지 않습니다. sorted() 함수를 사용합니다.
tu9 = (10, 30, 100, 90, 50)
# tu9.sort() # 튜플은 sort 메서드가 존재하지 않음
result = sorted(tu9, reverse=True) # 내림차순하여 리스트로 반환
print(result)
print(tu9) # 변경되지 않았음
result = tuple(result)
print(result)
| 제어문 - 조건문 (0) | 2026.04.17 |
|---|---|
| 컬렉션 타입(세트, 딕셔너리) (0) | 2026.04.16 |
| 연산자 (0) | 2026.04.14 |
| 파이썬의 입력과 출력 (0) | 2026.04.14 |
| 문자열 다루기 (0) | 2026.04.13 |