>백엔드 개발 >파이썬 튜토리얼 >당신이 알아야 할 Python 목록 중복 제거 방법

당신이 알아야 할 Python 목록 중복 제거 방법

高洛峰
高洛峰원래의
2017-02-21 10:50:182297검색

서문

목록 중복 제거는 Python 스크립트를 작성할 때 흔히 발생하는 문제입니다. 소스 데이터의 출처에 관계없이 이를 목록으로 변환할 때 예상되는 결과는 우리의 최종 결과가 아닙니다. 가장 일반적인 것은 목록에 중복된 요소가 있다는 것입니다. 이때 가장 먼저 해야 할 일은 중복 제거입니다.

Python에 내장된 데이터 유형 집합을 사용하는 가장 간단한 방법부터 시작해 보겠습니다.

목록 데이터가 다음과 같다고 가정해 보겠습니다.

level_names = [
 u'Second Level',
 u'Second Level',
 u'Second Level',
 u'First Level',
 u'First Level'
]

세트의 요소는 반복될 수 없기 때문에 목록을 집합으로 변환할 때 중복된 요소는 자동으로 제거되는 것이 기본 원칙입니다.

>>> the_list = set(level_names)
>>> print(the_list)
set([u'Second Level', u'First Level'])

이것의 단점은 다음과 같습니다. 방법은 다시 목록으로 변환하는 것인데, 그런 요구 사항이 없으면 이 방법이 가장 간단한 대답일 수도 있습니다. 네, 그래서 일반적인 면접질문에서는 목록을 작성하게 됩니다. 보통

목록에서 중복을 제거하는 방법을 적어주세요. 사용할 수 없음)

사람들은 세트를 사용할 수 없다고 썼기 때문에 때때로 이 트릭이 작동하지 않으므로 물론 문제가 되지 않습니다. 다른 방법이 있습니다. .

우리 모두는 목록을 순회할 수 있다는 것을 알고 있으며, 순회할 수 있으면 문제가 간단해집니다. 그런 다음 빈 목록을 정의한 다음 데이터로 목록을 순회하고, 순회할 때 판단을 추가합니다. 빈 목록에 Go를 추가하고, 있으면 버리세요. 코드는 다음과 같습니다.

the_list = []
for level in level_names:
 if level not in the_list:
  the_list.append(level)
print(the_list)

이 방법이 괜찮다고 생각하시나요? , 그러나 이 방법은 일반적인 작은 목록에는 적합합니다. 문제가 없지만 초대형 목록을 만나면 해당 목록을 사용할 수 없습니다. 왜냐하면 the_list의 목록이 매우 커져 판단할 때 효율성에 영향을 미치기 때문입니다. 인덱스 순으로 목록을 검색하기 때문에 데이터 양이 많을 경우 속도가 느려집니다.

큰 목록이 나타나면 어떻게 해야 하는지 묻고 싶을 수도 있습니다. 더 멋진 방법이 있나요? 물론 계속해서 판단할 때 목록을 사용하면 효율성에 영향을 미치므로 생각을 바꿔서 집합을 사용하면 됩니다. 그러면 집합이 사용하는 해시 함수가 더 빠를까요? 세트는 순서가 없고 위치는 고정되어 있습니다. 특정 요소가 존재하는지 확인하는 데는 한 번만 걸립니다. 온라인에서 누군가가 동일한 데이터 조건에서 목록을 사용하여 요소를 검색하는 데 16분이 걸렸습니다. set을 사용하는 데 52초가 걸립니다. 이 비교를 통해 효과를 확인할 수 있습니다. 코드는 다음과 같습니다.

the_list = []
the_set = set()
for level in level_names:
 if level not in the_set:
  the_set.add(level)
  the_list.append(level)
print(the_list)

당신이 알아야 할 Python 목록 중복 제거 방법에 관한 기사는 PHP 중국어 웹 사이트를 주목하십시오!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.