Python 목록에서 복제를 제거하고 주문을 유지하는 방법은 무엇입니까? [복제하다
문제
이 질문은 이미 여기에 답이 있습니다.
문자열 목록이 주어지면 알파벳순으로 정렬하고 복제물을 제거하고 싶습니다. 나는 이것을 할 수 있다는 것을 안다 :
from sets import Set
[...]
myHash = 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 및 반복)가 마음에 들지 않으면 발전기를 사용할 수 있습니다 (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
제휴하지 않습니다 StackOverflow