>백엔드 개발 >파이썬 튜토리얼 >Python의 목록에서 중복을 제거하는 몇 가지 방법

Python의 목록에서 중복을 제거하는 몇 가지 방법

不言
不言원래의
2018-04-09 17:30:223437검색

이 글은 주로 Python에서 목록에서 중복 항목을 제거하는 다양한 방법을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

오늘 동료의 간단한 요청 후 itertools를 사용했습니다. groupby.기능. 그러나 이 것은 결국 사용되지 않았다.

문제는 목록에서 뉴스 ID를 중복 제거한 후에도 순서가 변경되지 않은 상태로 유지되어야 한다는 것입니다.

직관적인 방법

가장 간단한 아이디어는 다음과 같습니다.


코드 복사코드는 다음과 같습니다.

ids = [1,2,3,3,4,2,3,4,5,6,1]
news_ids = []
for id in ids:
    if id not in news_ids:
        news_ids.append(id)
print news_ids

이것도 가능하지만 충분히 멋져 보이지는 않습니다.

Set 사용

또 다른 해결 방법은 set을 사용하는 것입니다.

코드 복사코드는 다음과 같습니다.

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))


결과적으로 원래 순서가 유지되지 않습니다.

인덱스별로 다시 정렬

결국 이 방법으로 해결됨:

코드 복사 코드는 다음과 같습니다.

ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)

itertools.grouby 사용

기사 처음에 itertools.grouby를 언급했습니다. , 그렇지 않은 경우 목록의 순서를 고려하면 다음을 사용할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it = itertools.groupby(ids)
for k, g in it:
    print k

itertools.groupby의 원리는 여기에서 볼 수 있습니다: http:/ /docs.python.org/2/library/itertools.html#itertools. Netizen groupby

추가됨: Reduce

사용 Netizen reatlk가 다른 솔루션에 대한 메시지를 남겼습니다. 여기에 추가하고 설명합니다:

코드 복사 코드는 다음과 같습니다.

In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1]
In [6]: func = lambda x,y:x if y in x else x + [y]
In [7]: reduce(func, [[], ] + ids)
Out[7]: [1, 4, 3, 2, 5, 6]


위는 ipython에서 실행하는 코드입니다. 여기서 람다 x,y:x if y in x else x + [y ] 등. 람다 x,y의 원자가: x 및 x의 y 또는 x+[y] .

먼저 ID를 [[], 1,4,3,...]으로 변경한 다음 축소 기능을 사용하는 것이 아이디어입니다. Reduce에 대한 설명은 여기를 참조하세요: http://docs.python.org/2/library/functions.html#reduce

위 내용은 Python의 목록에서 중복을 제거하는 몇 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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