파이썬 시퀀스 주요 기능
슬라이싱
- 슬라이싱은 파이썬의 1.0 버전부터 존재한 기능으로, 기존의 다른 언어보다 직관적이고 일관적인 방식으로 구현되었다.
numbers = [1, 2, 3, 4, 5]
print(numbers[1:4]) # 2번째부터 4번째까지 출력: [2, 3, 4]
print(numbers[::-1]) # 역순으로 출력: [5, 4, 3, 2, 1]
- 슬라이싱을 하면 새로운 리스트 객체가 생성되지만 얕은 복사를 한다는 것을 유의해야 한다. 리스트의 내부 객체가 만약 변경 가능한 객체(Mutable Object)라면 해당 객체를 수정했을 때 원본 리스트에도 영향을 준다.
>>> original_list = [[1, 2], [3, 4]]
>>> sliced_list = original_list[1]
>>> sliced_list[0] = 'NEW VALUE'
>>> print("Original list:", original_list)
Original list: [[1, 2], ['NEW VALUE', 4]]
리스트 컴프리헨션
- 리스트 컴프리헨션은 파이썬 2.0 버전부터 도입된 기능으로 PEP 202 문서를 통해 관련 내용을 확인할 수 있다.
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers) # 출력: [2, 4, 6]
제너레이터
- 제너레이터는 파이썬 2.2 버전에서 도입된 기능으로, PEP 255에 정의되어 있다. 제너레이터는 메모리 효율성을 극대화하면서 반복 작업을 수행할 수 있도록 도와준다.
def infinite_sequence():
num = 0
while True:
yield num
num += 1
# 제너레이터는 필요할 때만 값을 생성하므로 메모리 효율적이다
gen = infinite_sequence()
print(next(gen)) # 출력: 0
zip() 함수
- zip() 함수는 파이썬의 내장 함수로, 여러 시퀀스를 병렬로 묶어주는 기능을 제공한다. 동일한 길이의 시퀀스를 함께 묶어, 각 시퀀스에서 같은 인덱스에 위치한 요소들을 튜플로 반환한다.
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
grades = ["A", "B", "C"]
for name, score, grade in zip(names, scores, grades):
print(f"{name}: {score}, Grade: {grade}")
"""
출력:
Alice: 85, Grade: A
Bob: 92, Grade: B
Charlie: 78, Grade: C
"""