파이썬에서 리스트 안에 담긴 여러 개의 인덱스 범위(range)에 해당하는 요소들을 한꺼번에 추출해야 하는 경우가 있습니다. 이럴 때는 간단한 반복문과 extend 메서드를 조합하면 손쉽게 해결할 수 있습니다.
예제 코드
아래는 정수 리스트에서 지정된 인덱스 범위에 해당하는 요소들을 추출하는 예제입니다.
my_list = [14, 55, 41, 14, 17, 59, 22, 25, 14, 69, 42, 66, 99, 19]
print("The list is :")
print(my_list)
range_list = [(12, 14), (17, 18), (22, 28)]
print("The list is :")
print(range_list)
my_result = []
for element in range_list:
my_result.extend(my_list[element[0] : element[1] + 1])
print("The result is :")
print(my_result)
출력 결과
The list is : [14, 55, 41, 14, 17, 59, 22, 25, 14, 69, 42, 66, 99, 19] The list is : [(12, 14), (17, 18), (22, 28)] The result is : [99, 19]
코드 설명
정수로 구성된 리스트를 정의한 뒤 콘솔에 출력합니다.
각 튜플이 (시작 인덱스, 끝 인덱스)를 의미하는 튜플 리스트를 별도로 정의하고 출력합니다.
추출된 요소를 저장할 빈 리스트를 하나 생성합니다.
범위 리스트를 순회하면서, 각 튜플의 첫 번째 요소(시작 인덱스)부터 두 번째 요소에 1을 더한 값(끝 인덱스)까지 슬라이싱한 결과를 빈 리스트에 추가합니다.
이 과정에서
extend메서드를 사용하면 슬라이싱된 요소들이 통째로 묶인 채가 아니라 개별 요소로 펼쳐져서 추가됩니다.파이썬 슬라이싱은 끝 인덱스를 포함하지 않기 때문에, 끝 인덱스까지 결과에 담기려면
+ 1을 더해주어야 합니다.최종적으로 추출된 결과 리스트가 콘솔에 출력됩니다.
리스트 컴프리헨션으로 더 간결하게
같은 로직은 리스트 컴프리헨션(list comprehension)을 활용하면 한 줄로도 표현할 수 있습니다.
my_result = [] [my_result.extend(my_list[start:end + 1]) for start, end in range_list]
범위 정보가 많아지더라도 동일한 패턴으로 확장할 수 있으므로, 로그 데이터나 대용량 리스트에서 특정 구간만 골라내야 할 때 유용하게 활용할 수 있습니다.