Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 리스트에서 범위별 요소 추출하기

파이썬에서 리스트 안에 담긴 여러 개의 인덱스 범위(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]

범위 정보가 많아지더라도 동일한 패턴으로 확장할 수 있으므로, 로그 데이터나 대용량 리스트에서 특정 구간만 골라내야 할 때 유용하게 활용할 수 있습니다.