这个问题已经有一个答案在这里:

鉴于一串名单,我想整理按字母顺序,并删除重复的。我知道我可以这样做:

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

但我不知道如何检索该清单成员从哈希按字母顺序排列。

我没有结婚的散列,以任何方式完成这会的工作。此外,业绩不是一个问题,所以我喜欢一个解决方案,是代码表示明确地向一个快但更多的不透明的一个。

有帮助吗?

解决方案

一个列表中可以排序和消除重复使用的内在职能:

myList = sorted(set(myList))
  • set 是一个建立在功能Python>=2.3
  • sorted 是一个建立在功能Python>=2.4

其他提示

如果你输入是已经排序,然后可能有一个更简单的方法来做到这一点:

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))))

如果你不喜欢迭代(拉链和重复)可以使用的发电机(工作都在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's键在排顺序:

for key in sorted(my_dict.keys()):
   print key, my_dict[key]
   ...

而且还因为 tuple's命令的第一个成员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     
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top