파이썬 목록에서 중복을 제거하고 순서를 유지하는 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
문자열 목록이 주어지면 알파벳순으로 정렬하고 중복을 제거하고 싶습니다. 나는 이것을 할 수 있다는 것을 안다.
from sets import Set
[...]
myHash = Set(myList)
하지만 해시에서 알파벳 순서로 목록 멤버를 검색하는 방법을 모르겠습니다.
나는 해시와 결혼하지 않았으므로 이것을 달성하는 어떤 방법도 효과가 있습니다. 또한 성능은 문제가되지 않으므로 빠르고 불투명 한 것보다 코드로 명확하게 표현 된 솔루션을 선호합니다.
내장 함수를 사용하여 목록을 정렬하고 중복 제거 할 수 있습니다.
myList = sorted(set(myList))
입력 한 내용이 이미 정렬 된 경우 더 간단한 방법이있을 수 있습니다.
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
'program tip' 카테고리의 다른 글
Mac OSX 매버릭스에서 Maven을 찾을 수 없음 (0) | 2020.10.28 |
---|---|
UIApplication.registerForRemoteNotifications ()는 메인 스레드에서만 호출되어야합니다. (0) | 2020.10.28 |
현재 컨텍스트에 'controlname'이름이 없습니다. (0) | 2020.10.28 |
Python에서 범위를 벗어난 인덱스에 대한 기본값 가져 오기 (0) | 2020.10.28 |
Dagger 2.2 컴포넌트 빌더 모듈 메소드가 더 이상 사용되지 않음 (0) | 2020.10.28 |