>백엔드 개발 >파이썬 튜토리얼 >Python은 목록 구조에서 값을 중복 제거합니다.

Python은 목록 구조에서 값을 중복 제거합니다.

高洛峰
高洛峰원래의
2017-03-02 17:08:391394검색

오늘 문제가 발생하여 동료의 간단한 안내를 받은 후 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


이것도 케이스 작동하지만 충분히 멋져 보이지는 않습니다.
세트 사용
또 다른 해결책은 세트를 사용하는 것입니다:


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://www.php.cn/
리듀스 사용
네티즌 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: y in x 및 x 또는 x+[y] 와 동일합니다.
먼저 ID를 [[], 1,4,3,...]으로 변경한 다음 축소 기능을 사용하는 것이 아이디어입니다. Reduce에 대한 설명은 여기를 참조하세요: http://docs.python.org/2/library/functions.html#reduce


추가 Python은 값에 대한 작업을 수행합니다. ​목록 구조에서 중복제거 관련 글은 PHP 중국어 홈페이지를 주목해주세요!


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