2011-08-03 4 views
7

나는이 모양이 목록의 목록을 가지고 :목록의 목록에서 고유 항목 가져 오기?

animal_groups = [['fox','monkey', 'zebra'], ['snake','elephant', 'donkey'],['beetle', 'mole', 'mouse'],['fox','monkey', 'zebra']] 

중복 된 목록을 제거하는 가장 좋은 무엇입니까? 위의 예를 사용하여, 나는이를 생성 할 코드를 찾고 있어요 : 내가 처음 내가 set()를 사용할 수 있다고 생각

uniq_animal_groups = [['fox','monkey', 'zebra'], ['snake','elephant', 'donkey'],['beetle', 'mole', 'mouse']] 

,하지만이 목록의 목록에서 작동 표시되지 않습니다. 또한 itertools을 사용한 예제를 보았지만이 코드는 완전히 명확하지 않았습니다. 도와 주셔서 감사합니다!

답변

15
uniq_animal_groups = set(map(tuple, animal_groups)) 

당신이 목록 집합 대신 튜플 세트로 끝나더라도이 트릭을 수행 할 것입니다. (물론 목록을 목록으로 다시 변환 할 수는 있지만 특별한 이유가 없으면 왜 성가시겠습니까?)

+0

환상적! 도움을 주셔서 대단히 감사합니다. 이것은 완벽하게 작동했습니다. – drbunsen

+0

목록에 접근하고 싶은 경우 (예 : uniq_animal_groups [0]'을 검사하십시오.) 대신'uniq_animal_groups = list (set (map (tuple, animal_groups)))'를 실행하십시오. –

5

목록을 튜플로 변환 한 다음 집합으로 넣을 수 있습니다. 기본적으로

: 당신은리스트의 목록으로 결과를 선호하는 경우

uniq_animal_groups = set(map(tuple, animal_groups)) 

이 시도 :

uniq_animal_groups = [list(t) for t in set(map(tuple, animal_groups))] 

나 :

uniq_animal_groups = map(list, set(map(tuple, animal_groups))) 
0

당신이 걱정하지 않는 경우 내부 목록의 정렬, 모든 것을 먼저 세트로 변환 :

uniq_animal_groups = map(list, set(map(tuple, map(set, animal_groups))))