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 を使用してください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))))

イテレータ (zip と repeat) が気に入らない場合は、ジェネレータを使用できます (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

ただし、入力リストの各要素に対して not in を繰り返し使用すると、O(n^2) になります。

于 2009-01-26T14:16:56.193 に答える
2

> しかし、リストのメンバーをハッシュからアルファベット順に取得する方法がわかりません。

本当にあなたの主な質問ではありませんが、将来の参考のために、ロッドの答えを使用して、 aのキーをソートされた順序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
    ...
于 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 に答える