program tip

파이썬 목록에서 중복을 제거하고 순서를 유지하는 방법은 무엇입니까?

radiobox 2020. 10. 28. 07:58
반응형

파이썬 목록에서 중복을 제거하고 순서를 유지하는 방법은 무엇입니까?


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

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

하지만 해시에서 알파벳 순서로 목록 멤버를 검색하는 방법을 모르겠습니다.

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


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

myList = sorted(set(myList))
  • set 파이썬 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 및 repeat)가 마음에 들지 않으면 생성기를 사용할 수 있습니다 (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

입력 목록의 각 요소에 대해 not in을 반복적으로 사용하는 것은 O (n ^ 2)입니다.


>하지만 해시에서 알파벳 순서로 목록 멤버를 검색하는 방법을 모르겠습니다.

실제로 주요 질문은 아니지만 향후 참조를 위해 Rod의 대답을 사용하여 의 키를 정렬 된 순서로 sorted탐색하는 데 사용할 수 있습니다 dict.

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

또한 tuple's는 튜플의 첫 번째 멤버에 의해 정렬 되기 때문에 다음과 같이 동일한 작업을 수행 할 수 있습니다 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     

참고URL : https://stackoverflow.com/questions/479897/how-to-remove-duplicates-from-python-list-and-keep-order

반응형