给定一个字符串列表,我想按字母顺序对其进行排序并去重。我知道可以这样做:
from sets import Set
[...]
myHash = Set(myList)
但是我不知道如何按字母顺序检索哈希表中的列表成员。
我并不执着于使用哈希表,因此任何实现此目标的方法都可以。此外,性能不是问题,因此我更喜欢一个清晰的代码解决方案,而不是一个更快但更不透明的解决方案。
给定一个字符串列表,我想按字母顺序对其进行排序并去重。我知道可以这样做:
from sets import Set
[...]
myHash = Set(myList)
但是我不知道如何按字母顺序检索哈希表中的列表成员。
我并不执着于使用哈希表,因此任何实现此目标的方法都可以。此外,性能不是问题,因此我更喜欢一个清晰的代码解决方案,而不是一个更快但更不透明的解决方案。
如果你的输入已经排序好了,那么可能有一种更简单的方法:
from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))
如果你想保留原始列表的顺序,只需要使用带有None
值的OrderedDict。
在Python2中:
from collections import OrderedDict
from itertools import izip, repeat
unique_list = list(OrderedDict(izip(my_list, repeat(None))))
from collections import OrderedDict
from itertools import repeat
unique_list = list(OrderedDict(zip(my_list, repeat(None))))
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
是按照元组的第一个成员排序的,您也可以使用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