79

给定一个字符串列表,我想按字母顺序对其进行排序并删除重复项。我知道我可以这样做:

from sets import Set
[...]
myHash = Set(myList)

但我不知道如何按字母顺序从哈希中检索列表成员。

我没有嫁给哈希,所以任何方法都可以做到这一点。此外,性能不是问题,因此我更喜欢用代码清晰表达的解决方案,而不是快速但更不透明的解决方案。

4

6 回答 6

200

可以使用内置函数对列表进行排序和去重:

myList = sorted(set(myList))
  • set是 Python >= 2.3 的内置函数
  • sorted是 Python >= 2.4 的内置函数
于 2009-01-26T14:16:10.360 回答
12

如果您的输入已经排序,那么可能有一种更简单的方法:

from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))
于 2009-01-26T14:48:21.683 回答
6

如果要保持原始列表的顺序,只需将 OrderedDict 与Noneas 值一起使用。

在 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))
于 2016-05-10T09:49:06.297 回答
3

如果你追求的是清晰度,而不是速度,我认为这很清楚:

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 。

于 2009-01-26T14:16:56.193 回答
2

> 但我不知道如何按字母顺序从哈希中检索列表成员。

不是你的主要问题,但为了将来参考 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
    ...
于 2009-01-26T15:22:18.027 回答
0

对于字符串数据

 output = []

     def uniq(input):
         if input not in output:
            output.append(input)
 print output     
于 2013-06-26T09:36:24.987 回答