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

高洛峰
풀어 주다: 2017-03-02 17:08:39
원래의
1343명이 탐색했습니다.

오늘 문제가 발생하여 동료의 간단한 안내를 받은 후 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 중국어 홈페이지를 주목해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!