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