Python 목록에서 복제를 제거하고 주문을 유지하는 방법은 무엇입니까? [복제하다

StackOverflow https://stackoverflow.com/questions/479897

  •  20-08-2019
  •  | 
  •  

문제

이 질문은 이미 여기에 답이 있습니다.

문자열 목록이 주어지면 알파벳순으로 정렬하고 복제물을 제거하고 싶습니다. 나는 이것을 할 수 있다는 것을 안다 :

from sets import Set
[...]
myHash = Set(myList)

그러나 나는 알파벳 순서로 해시에서 목록 멤버를 검색하는 방법을 모른다.

나는 해시와 결혼하지 않았으므로 이것을 달성하는 방법은 효과가 있습니다. 또한 성능은 문제가되지 않으므로 코드로 명확하게 표현되는 솔루션을 선호하지만 빠르고 불투명 한 솔루션을 선호합니다.

도움이 되었습니까?

해결책

내장 기능을 사용하여 목록을 정렬하고 중복 제거 할 수 있습니다.

myList = sorted(set(myList))
  • set Python> = 2.3의 내장 기능입니다
  • sorted Python> = 2.4의 내장 함수입니다

다른 팁

입력이 이미 정렬 된 경우 더 간단한 방법이있을 수 있습니다.

from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))

원본 목록의 순서를 유지하려면 OrderedDict를 사용하십시오. None 값으로.

Python2에서 :

    from collections import OrderedDict
    from itertools import izip, repeat

    unique_list = list(OrderedDict(izip(my_list, repeat(None))))

Python3에서는 훨씬 간단합니다.

    from collections import OrderedDict
    from itertools import repeat

    unique_list = list(OrderedDict(zip(my_list, repeat(None))))

반복자 (zip 및 반복)가 마음에 들지 않으면 발전기를 사용할 수 있습니다 (2 및 3 모두에서 작동) :

    from collections import OrderedDict
    unique_list = list(OrderedDict((element, None) for element in my_list))

속도보다는 명확성이라면, 나는 이것이 매우 분명하다고 생각합니다.

def sortAndUniq(input):
  output = []
  for x in input:
    if x not in output:
      output.append(x)
  output.sort()
  return output

그러나 입력 목록의 각 요소에 대해 반복적으로 사용하지 않는 것은 O (n^2)입니다.

> 그러나 나는 알파벳 순서로 해시에서 목록 멤버를 검색하는 방법을 모른다.

실제로 당신의 주요 질문이 아니라 향후 참조로드의 답변을 위해 sorted 가로 지르는 데 사용할 수 있습니다 dict정렬 된 순서의 열쇠 :

for key in sorted(my_dict.keys()):
   print key, my_dict[key]
   ...

그리고 왜냐하면 tuple튜플의 첫 번째 멤버가 주문한 경우 items:

for key, val in sorted(my_dict.items()):
    print key, val
    ...

문자열 데이터의 경우

 output = []

     def uniq(input):
         if input not in output:
            output.append(input)
 print output     
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top