Python 리스트 연산: 생성, 접근, 수정, 고급 기법
Python 리스트 연산
Python 리스트는 언어에서 가장 다재다능한 자료구조 중 하나로, 값의 시퀀스를 효율적으로 저장, 구성, 조작할 수 있게 해줍니다. 이 가이드는 리스트 생성과 요소 접근부터 슬라이싱, 컴프리헨션, 내장 메서드 같은 고급 기법까지 모두 다룹니다.
동영상: Python 리스트와 튜플
Python 리스트를 사용하면 여러 항목을 동시에 다룰 수 있습니다. 예:
# 프로그래밍 언어 리스트
['Python', 'C++', 'JavaScript']
Python 리스트 생성하기
리스트는 대괄호 [] 안에 요소를 쉼표로 구분해 넣어 생성합니다. 리스트는 항목 수에 제한이 없으며 다양한 데이터 타입을 혼합할 수 있습니다.
# 정수 리스트
my_list = [1, 2, 3]
예시:
# 빈 리스트
my_list = []
# 혼합 데이터 타입
my_list = [1, "Hello", 3.4]
리스트 안에 또 다른 리스트를 포함시켜 중첩 구조를 만들 수도 있습니다.
# 중첩 리스트
my_list = ["mouse", [8, 4, 6], ["a"]]
리스트 요소 접근하기
Python은 항목에 접근하는 여러 방법을 제공합니다.
인덱싱
[] 연산자를 사용합니다. 인덱스는 0부터 시작하며, 범위를 벗어나면 IndexError, 정수가 아닌 인덱스를 사용하면 TypeError가 발생합니다.
my_list = ['p', 'r', 'o', 'b', 'e']
print(my_list[0]) # p
print(my_list[2]) # o
print(my_list[4]) # e
n_list = ["Happy", [2, 0, 1, 5]]
print(n_list[0][1]) # a
print(n_list[1][3]) # 5
print(my_list[4.0]) # TypeError
출력
p o e a 5 Traceback (most recent call last): File "<string>", line 21, in <module> TypeError: list indices must be integers or slices, not float
음수 인덱싱
음수 인덱스는 리스트 끝에서부터 셉니다: -1은 마지막 요소, -2는 끝에서 두 번째 등입니다.
my_list = ['p','r','o','b','e']
print(my_list[-1]) # e
print(my_list[-5]) # p
출력
e p
리스트 슬라이싱
슬라이싱은 콜론 연산자 :를 사용해 항목 범위를 추출합니다. 시작 인덱스는 포함되고, 끝 인덱스는 제외됩니다.
my_list = ['p','r','o','g','r','a','m','i','z']
print(my_list[2:5]) # ['o', 'g', 'r']
print(my_list[5:]) # ['a', 'm', 'i', 'z']
print(my_list[:]) # 전체 리스트
출력
['o', 'g', 'r'] ['a', 'm', 'i', 'z'] ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z']
참고: 슬라이싱은 새 리스트를 반환하며 원본은 변경되지 않습니다.
리스트 요소 수정하기
리스트는 가변(mutable)입니다. 단일 항목이나 슬라이스를 교체할 수 있습니다.
odd = [2, 4, 6, 8]
odd[0] = 1
print(odd)
odd[1:4] = [3, 5, 7]
print(odd)
출력
[1, 4, 6, 8] [1, 3, 5, 7]
append()(단일), extend()(여러 개)로 요소를 추가합니다. +로 연결, *로 반복도 가능합니다.
odd = [1, 3, 5]
odd.append(7)
print(odd)
odd.extend([9, 11, 13])
print(odd)
print(odd + [9, 7, 5])
print(["re"] * 3)
출력
[1, 3, 5, 7] [1, 3, 5, 7, 9, 11, 13] [1, 3, 5, 9, 7, 5] ['re', 're', 're']
insert()로 특정 인덱스에 삽입하거나, 빈 슬라이스에 할당해 삽입할 수 있습니다.
odd = [1, 9]
odd.insert(1, 3)
print(odd)
odd[2:2] = [5, 7]
print(odd)
출력
[1, 3, 9] [1, 3, 5, 7, 9]
리스트 요소 삭제하기
del로 인덱스나 슬라이스, 또는 리스트 전체를 삭제합니다. remove()는 첫 번째 일치하는 값을, pop()은 인덱스로 요소를 제거하고 반환합니다(인덱스 생략 시 마지막). clear()는 리스트를 비웁니다.
my_list = ['p', 'r', 'o', 'b', 'l', 'e', 'm']
# 단일 항목 삭제
del my_list[2]
print(my_list)
# 여러 항목 삭제
del my_list[1:5]
print(my_list)
# 리스트 전체 삭제
del my_list
print(my_list) # NameError
출력
['p', 'r', 'b', 'l', 'e', 'm'] ['p', 'm'] Traceback (most recent call last): File "<string>", line 18, in <module> NameError: name 'my_list' is not defined
슬라이스 할당으로도 삭제 가능:
>>> my_list = ['p','r','o','b','l','e','m']
>>> my_list[2:3] = []
>>> my_list
['p', 'r', 'b', 'l', 'e', 'm']
>>> my_list[2:5] = []
>>> my_list
['p', 'r', 'm']
주요 리스트 메서드
메서드 설명
append() 끝에 요소 추가
extend() 다른 이터러블의 모든 요소 추가
insert() 지정된 인덱스에 항목 삽입
remove() 첫 번째 일치하는 값 제거
pop() 인덱스로 요소 제거 및 반환(생략 시 마지막)
clear() 리스트 비우기
index() 값의 첫 번째 인덱스 반환
count() 값의 출현 횟수 세기
sort() 오름차순 정렬
reverse() 순서 뒤집기
copy() 얕은 복사본 반환
my_list = [3, 8, 1, 6, 8, 8, 4]
my_list.append('a')
print(my_list)
print(my_list.index(8)) # 1
print(my_list.count(8)) # 3
리스트 컴프리헨션
리스트 컴프리헨션은 리스트를 간결하게 생성하는 방법을 제공합니다.
pow2 = [2 ** x for x in range(10)]
print(pow2)
출력
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
다음과 동등합니다:
pow2 = []
for x in range(10):
pow2.append(2 ** x)
컴프리헨션에는 여러 for 절이나 if 필터를 포함할 수 있습니다.
>>> pow2 = [2 ** x for x in range(10) if x > 5]
>>> pow2
[64, 128, 256, 512]
>>> odd = [x for x in range(20) if x % 2 == 1]
>>> odd
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
>>> [x+y for x in ['Python ','C '] for y in ['Language','Programming']]
['Python Language', 'Python Programming', 'C Language', 'C Programming']
자세한 내용은 공식 Python 문서 를 참조하세요.
기타 리스트 연산
멤버십 테스트
in 또는 not in으로 값 존재 여부 확인.
my_list = ['p', 'r', 'o', 'b', 'l', 'e', 'm']
print('p' in my_list) # True
print('a' in my_list) # False
print('c' not in my_list) # True
출력
True False True
리스트 순회하기
for 루프로 각 항목 처리.
for fruit in ['apple','banana','mango']:
print("I like", fruit)
출력
I like apple I like banana I like mango