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

파이썬 – K번째 열 요소가 중복되는 행 제거하기

파이썬에서 2차원 리스트를 다룰 때, 특정 'K'번째 열의 값이 서로 같은(중복되는) 행을 제거해야 하는 경우가 있습니다. 이럴 때는 간단한 반복문과 append 메서드를 활용하면 손쉽게 해결할 수 있습니다.

예제

아래는 실제 동작을 보여주는 데모입니다 −

my_list = [[45, 95, 26], [70, 35, 74], [87, 65, 23], [70, 35, 74], [67, 85, 12], [45, 65, 0]]

print("리스트 : ")
print(my_list)

K = 1
print("K의 값 : ")
print(K)

my_result = []
my_mem = []
for index in my_list:

    if not index[K] in my_mem:
        my_result.append(index)
        my_mem.append(index[K])

print("결과 리스트 : ")
print(my_result)

출력

리스트 :
[[45, 95, 26], [70, 35, 74], [87, 65, 23], [70, 35, 74], [67, 85, 12], [45, 65, 0]]
K의 값 :
1
결과 리스트 :
[[45, 95, 26], [70, 35, 74], [87, 65, 23], [67, 85, 12]]

코드 설명

  • 리스트 안에 리스트가 포함된 형태(2차원 리스트)가 정의되고, 콘솔에 출력됩니다.

  • 중복 판단 기준이 될 열의 위치인 K 값이 초기화되고 콘솔에 출력됩니다.

  • 결과를 담을 리스트와 이미 확인한 값을 담을 리스트, 두 개의 빈 리스트가 정의됩니다.

  • 원본 리스트를 순회하면서, 현재 행의 K번째 요소가 아직 확인된 적이 없다면 해당 행을 결과 리스트에 추가하고, 그 요소 값을 확인용 리스트에 함께 저장합니다.

  • 마지막으로 중복이 제거된 결과 리스트가 콘솔에 출력됩니다.

더 효율적인 방법: set 활용하기

위 방법은 in 연산자로 리스트 내부를 탐색하기 때문에 데이터가 많아질수록 성능이 저하될 수 있습니다(O(n²)). 대신 set을 사용하면 조회 속도가 O(1)로 크게 향상됩니다.

my_list = [[45, 95, 26], [70, 35, 74], [87, 65, 23], [70, 35, 74], [67, 85, 12], [45, 65, 0]]

K = 1

seen = set()
my_result = []

for row in my_list:
    if row[K] not in seen:
        seen.add(row[K])
        my_result.append(row)

print("결과 리스트 : ", my_result)

출력

결과 리스트 :  [[45, 95, 26], [70, 35, 74], [87, 65, 23], [67, 85, 12]]

두 방법 모두 각 행의 원래 순서를 유지하면서, K번째 열 값이 처음 등장한 행만 남기고 나머지 중복 행은 제거합니다. 처리할 데이터의 크기가 크다면 set 기반 방식을 사용하는 것이 좋습니다.