파이썬 목록에서 중복 항목을 제거하는 5가지 방법

이 자습서에서는 Python 목록에서 중복 항목을 제거하는 방법을 배웁니다.

Python에서 목록으로 작업할 때 중복을 제거하여 목록에서 고유한 항목으로만 작업해야 하는 경우가 있습니다.

이를 수행할 수 있는 몇 가지 다른 방법이 있습니다. 이 자습서에서는 이러한 5가지 기술을 살펴보겠습니다.

파이썬 목록의 기초

Python 목록의 기본 사항을 검토하여 토론을 시작하겠습니다.

파이썬 목록은 변하기 쉬운. 따라서 목록에서 요소를 추가 및 제거하여 제자리에서 수정할 수 있습니다. 또한 Python 목록은 반드시 고유하지 않아도 되는 요소의 모음입니다.

그렇다면 고유한 요소만 유지하고 중복되거나 반복되는 요소를 제거하는 방법은 무엇입니까?

글쎄, 당신은 몇 가지 다른 방법으로 이것을 할 수 있습니다. 원래 목록의 고유한 요소만 포함하는 새 목록을 만들 수도 있습니다. 또는 원래 목록을 수정하고 중복 항목을 제거하도록 선택할 수 있습니다.

우리는 이 튜토리얼에서 이것들을 자세히 배울 것입니다.

Python 목록에서 중복을 제거하는 방법

실제 예를 들어 보겠습니다. 친구의 생일 파티에 참석했다고 가정해 봅시다.🎊🎉

표시된 과자 모음에서 반복되는 항목이 몇 개 있음을 알 수 있습니다. 이제 과자 목록에서 중복 항목을 제거하려고 합니다.

위 이미지의 모든 항목을 포함하는 과자 목록을 만들어 보겠습니다.

sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

위의 과자 목록에서 아이템 ‘캔디’와 ‘컵케이크’는 두 번 반복됩니다. 이 예제 목록을 사용하여 중복 항목을 제거해 보겠습니다.

중복 제거를 위해 Python 목록 반복

가장 간단한 방법은 각 항목을 정확히 한 번만 포함하는 새 목록을 만드는 것입니다.

아래 코드 셀을 읽으십시오.

unique_sweets = []
for sweet in sweets:
  if sweet not in unique_sweets:
    unique_sweets.append(sweet)

print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • 빈 목록 unique_sweets를 초기화합니다.
  • 과자 목록을 순회하면서 우리는 각각의 과자에 접근합니다.
  • sweet가 unique_sweets 목록에 아직 없으면 .append() 메서드를 사용하여 unique_sweets 목록의 끝에 추가합니다.
  Windows에서 2개의 장치에서 소리를 재생하는 방법

예를 들어 과자 목록에서 ‘candy’가 두 번째로 나타나는 것과 같이 반복되는 항목을 발견했다고 가정합니다. 이것은 이미 존재하므로 unique_sweets 목록에 추가되지 않습니다. sweet not in unique_sweets는 ‘cupcake’ 및 ‘candy’의 두 번째 발생에 대해 False로 평가됩니다.

따라서 이 방법에서는 모든 항목이 unique_sweets 목록에서 반복 없이 정확히 한 번 발생합니다.

목록 이해를 사용하여 중복 제거

목록 이해를 사용하여 unique_sweets 목록을 채울 수도 있습니다.

목록 이해의 기본 사항을 새로 고치고 싶으십니까?

▶️ Python의 목록 이해에 대한 자습서를 확인하십시오.

목록 이해 표현식을 사용합시다. [output for item in iterable if condition is True] 위의 반복문을 간결하게 다시 작성합니다.

unique_sweets = []
[unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets]
print(unique_sweets)

# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

새 목록을 생성하더라도 생성된 목록을 값으로 채우지 않습니다. 이는 출력이 unique_sweets 목록에 대한 .append() 작업이기 때문입니다.

Python 목록에서 중복 항목을 제거하려면 기본 제공 목록 메서드를 사용할 수도 있으며 다음 섹션에서 이에 대해 설명합니다.

기본 제공 목록 메서드를 사용하여 중복 제거

Python 목록 메서드 .count() 및 .remove()를 사용하여 중복 항목을 제거할 수 있습니다.

– 구문 list.count(value)를 사용하면 .count() 메서드는 목록에서 값이 발생한 횟수를 반환합니다. 따라서 반복 항목에 해당하는 개수는 1보다 커집니다.

– list.remove(value)는 목록에서 첫 번째 값을 제거합니다.

위의 코드를 사용하여 다음 코드가 있습니다.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  if sweets.count(sweet) > 1:
  # if True, remove the first occurrence of sweet
    sweets.remove(sweet)

print(sweets)

# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

.remove() 메서드는 첫 번째 값만 제거하므로 두 번 이상 나타나는 항목을 제거하는 데 사용할 수 없습니다.

  • 특정 항목이 중복되면(정확히 두 번 발생) 이 메서드는 첫 번째 항목을 제거합니다.
  • 특정 항목이 K 번 반복되면 위의 코드를 실행한 후에도 K-1 반복이 계속 유지됩니다.
  최고의 IT 위협 모니터링 시스템 5개와 필요한 이유

그러나 일반적으로 중복이라고 할 때 일반적으로 모든 반복을 참조합니다.

이 경우를 처리하기 위해 위의 루프를 수정하여 하나를 제외한 모든 반복을 제거할 수 있습니다. 특정 항목의 개수를 확인하기 위해 조건문을 사용하는 대신 while 루프를 실행하여 목록의 모든 항목 개수가 1이 될 때까지 중복을 반복적으로 제거할 수 있습니다.

이제 목록 과자에는 ‘컵케이크’가 2회, ‘사탕’이 3회 반복됩니다.

sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

아래와 같이 while 루프를 사용하여 반복을 제거할 수 있습니다. while 루프는 sweet의 개수가 1보다 큰 한 계속 실행됩니다. 한 번만 남아 있으면 sweet.count(sweet) > 1 조건이 False가 되고 루프는 다음 항목으로 건너뜁니다.

for sweet in sweets:
  # check if the count of sweet is > 1 (repeating item)
  while(sweets.count(sweet) > 1):
  # repeatedly remove the first occurrence of sweet until one occurrence remains.
    sweets.remove(sweet)

print(sweets)
# Output
['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

그러나 중첩 루프를 사용하는 것은 그다지 효율적이지 않을 수 있으므로 큰 목록으로 작업하는 경우 논의된 다른 기술 중 하나를 사용하는 것을 고려할 수 있습니다.

지금까지 우리는 다음을 배웠습니다.

  • 고유한 항목만 포함하는 새 목록을 생성하여 Python 목록에서 중복 항목을 제거하는 방법
  • 목록을 제자리에서 수정하기 위한 내장 목록 메서드 .count() 및 .remove()

값이 반복 없이 모두 고유해야 하는 일부 Python 내장 데이터 구조가 있습니다. 따라서 Python 목록을 이러한 데이터 구조 중 하나로 캐스팅하여 중복을 제거할 수 있습니다. 그런 다음 다시 목록으로 변환합니다. 다음 섹션에서 이 작업을 수행하는 방법을 배웁니다.

중복을 제거하기 위해 Python 목록을 세트로 캐스트

Python 집합은 모두 고유한 요소의 모음입니다. 따라서 세트에 있는 항목의 수(len()에 의해 제공됨)는 존재하는 고유한 요소의 수와 같습니다.

set(iterable) 구문을 사용하여 모든 Python iterable을 집합으로 캐스팅할 수 있습니다.

이제 목록 sweets를 집합으로 캐스팅하고 출력을 살펴보겠습니다.

set(sweets)
# Output
{'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

위 코드 셀의 출력에서 ​​모든 항목이 정확히 한 번 나타나고 중복 항목이 제거되었음을 알 수 있습니다.

  iPhone에서 자동 잠금을 끄는 방법

또한 항목의 순서가 원래 목록 과자의 순서와 반드시 같을 필요는 없습니다. 이는 고유한 요소의 모음일 뿐만 아니라 Python 집합 객체가 순서가 지정되지 않은 모음이기 때문입니다.

이제 목록을 집합으로 캐스팅하여 중복을 제거했으므로 아래와 같이 다시 목록으로 변환할 수 있습니다.

unique_sweets = list(set(sweets))
print(unique_sweets)

# Output
['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

목록 항목을 사전 키로 사용하여 중복 제거

Python 사전은 키가 값을 고유하게 식별하는 키-값 쌍의 모음입니다.

dict.fromkeys(keys, values) 구문과 함께 .fromkeys() 메서드를 사용하여 Python 사전을 만들 수 있습니다. 여기서 키와 값은 각각 사전의 키와 값을 포함하는 이터러블입니다.

  • keys는 필수 매개변수이며 사전의 키에 해당하는 모든 Python iterable이 될 수 있습니다.
  • 값은 선택적 매개변수입니다. iterable 값을 지정하지 않으면 기본값인 None이 사용됩니다.

값을 지정하지 않으면 dict.fromkeys(sweets)는 값이 기본값인 None으로 설정된 Python 사전을 반환합니다. 아래 코드 셀에서 이에 대해 설명합니다.

dict.fromkeys(sweets)

# Output
{'cake': None,
 'candy': None,
 'cheesecake': None,
 'cupcake': None,
 'lollipop': None}

이전 섹션과 마찬가지로 아래와 같이 사전을 목록으로 다시 변환할 수 있습니다.

unique_sweets = list(dict.fromkeys(sweets))
print(unique_sweets)
# Output
['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

위의 출력에서 ​​중복 항목이 목록 sweets에서 제거되었음을 알 수 있습니다.

요약👩‍🏫

다음은 Python 목록에서 중복 항목이나 반복을 제거하는 데 사용할 수 있는 다양한 방법을 요약한 것입니다.

  • Python 목록 메서드 .append()를 사용하여 반복되지 않는 항목을 새 목록에 추가합니다. 새 목록은 원래 목록의 각 항목을 정확히 한 번만 포함하고 모든 반복을 제거합니다. 목록 이해를 사용하여 이 작업을 수행할 수도 있습니다.
  • 내장 .count() 및 .remove() 메서드를 사용하여 정확히 두 번 발생하는 항목을 제거합니다. 모든 추가 발생을 제거하기 위해 while 루프에 동일하게 배치할 수 있습니다.
  • 고유한 요소만 유지하려면 Python 목록을 집합으로 캐스트하십시오.
  • 사전의 반복 키가 없어야 하므로 dict.fromkeys(list)를 사용하여 목록에서 중복을 제거하십시오.

다음으로 Python 프로젝트를 확인하여 연습하고 배우십시오. 또는 Python 목록에서 항목의 색인을 찾는 방법을 배우십시오. 즐거운 배움!