给定一个字符串列表,我想按字母顺序对其进行排序并删除重复项。我知道我可以这样做:
from sets import Set
[...]
myHash = Set(myList)
但我不知道如何按字母顺序从散列中检索列表成员。
我没有和哈希结婚,所以任何方法都可以实现。此外,性能不是问题,因此我更倾向于使用代码清楚地表达一个快速但不透明的解决方案。
答案 0 :(得分:186)
可以使用内置函数对列表进行排序和重复数据删除:
myList = sorted(set(myList))
答案 1 :(得分:10)
如果您的输入已经排序,那么可能有一种更简单的方法:
from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))
答案 2 :(得分:4)
如果您想保留原始列表的顺序,只需使用带有None
的OrderedDict作为值。
在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))))
如果您不喜欢迭代器(拉链和重复),您可以使用生成器(适用于2和3):
from collections import OrderedDict
unique_list = list(OrderedDict((element, None) for element in my_list))
答案 3 :(得分:2)
如果它清晰,你是在追求,而不是速度,我认为这是非常明确的:
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。
答案 4 :(得分:1)
>但我不知道如何按字母顺序从散列中检索列表成员。
不是你的主要问题,但是为了将来的参考,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
...
答案 5 :(得分:0)
对于字符串数据
output = []
def uniq(input):
if input not in output:
output.append(input)
print output