给定一个字符串列表,我想按字母顺序对其进行排序并删除重复项。我知道我可以这样做:
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
as 值一起使用。
在 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),但对于输入列表的每个元素重复使用 not in 。
> 但我不知道如何按字母顺序从哈希中检索列表成员。
不是你的主要问题,但为了将来参考 Rod's answer usingsorted
可用于dict
按排序顺序遍历 a 的键:
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