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

Python에서 리스트의 특정 위치 요소 제거하기

Python에서 중첩 리스트(nested list)로 표현된 데이터에서 특정 위치에 있는 행(row)을 제거해야 하는 경우가 종종 있습니다. 이럴 때 가장 간단하고 직관적인 방법은 반복문pop() 메서드를 함께 사용하는 것입니다.

핵심 포인트는 인덱스를 역순(reversed)으로 순회해야 한다는 점입니다. 앞쪽 인덱스부터 삭제하면 뒤따르는 요소들의 위치가 앞으로 당겨지면서, 원래 의도했던 인덱스와 어긋나게 되기 때문입니다.

예제 코드

아래 예제는 여러 개의 행을 가진 중첩 리스트에서 지정된 인덱스 위치의 행들을 제거하는 과정을 보여줍니다.

my_list = [[31, 42, 2], [1, 73, 29], [51, 3, 11], [0, 3, 51], [17, 3, 21], [1, 71, 10], [0, 81, 92]]

print("The list is :")
print(my_list)
my_index_list = [1, 2, 5]

for index in my_index_list[::-1]:
   my_list.pop(index)

print("The output is :")
print(my_list)

실행 결과

The list is :
[[31, 42, 2], [1, 73, 29], [51, 3, 11], [0, 3, 51], [17, 3, 21], [1, 71, 10], [0, 81, 92]]
The output is :
[[31, 42, 2], [0, 3, 51], [17, 3, 21], [0, 81, 92]]

코드 설명

  • 먼저 여러 개의 하위 리스트를 포함하는 중첩 리스트를 정의하고, 콘솔에 출력하여 초기 상태를 확인합니다.

  • 다음으로, 제거하고자 하는 위치를 나타내는 정수 값들로 구성된 인덱스 리스트([1, 2, 5])를 정의합니다.

  • 슬라이싱 문법인 [::-1]을 사용해 인덱스 리스트를 역순으로 뒤집어 순회합니다. 이렇게 하면 큰 인덱스부터 삭제되므로, 삭제 작업이 다른 요소들의 인덱스에 영향을 주지 않습니다.

  • 각 인덱스에 대해 pop() 메서드를 호출하여 해당 위치의 행을 리스트에서 제거합니다.

  • 마지막으로 처리가 완료된 리스트를 콘솔에 출력하여 결과를 확인합니다.

참고: 대안 방법

원본 리스트를 유지하면서 새로운 리스트를 만들고 싶다면, 리스트 컴프리헨션(list comprehension)을 활용할 수도 있습니다.

my_index_set = set(my_index_list)
new_list = [row for i, row in enumerate(my_list) if i not in my_index_set]

이 방식은 원본 리스트를 변경하지 않으므로, 데이터 보존이 필요한 상황에서 더 안전하게 활용할 수 있습니다.