web-dev-qa-db-ja.com

Pythonリストから重複を削除して順序を維持するには?

文字列のリストが与えられたら、アルファベット順に並べ替えて重複を削除します。私はこれができることを知っています:

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

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

私はハッシュと結婚していないので、これを達成する方法はすべて機能します。また、パフォーマンスは問題ではないので、高速でより不透明なものよりも、コードで明確に表現されたソリューションを好むでしょう。

72
Josh Glover

リストは、組み込み関数を使用してソートおよび重複排除できます。

myList = sorted(set(myList))
  • set はPython> = 2.3の組み込み関数です
  • sorted はPython> = 2.4の組み込み関数です
188

入力が既にソートされている場合は、より簡単な方法があります。

from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))
11
sykora

元のリストの順序を維持する場合は、値として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))))

イテレータ(Zipと繰り返し)が気に入らない場合は、ジェネレータを使用できます(2と3の両方で機能します)。

    from collections import OrderedDict
    unique_list = list(OrderedDict((element, None) for element in my_list))
5

スピードではなく、あなたが求めている明快さであれば、これは非常に明確だと思います:

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を繰り返し使用しています。

3
unwind

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

本当にあなたの主な質問ではありませんが、今後の参照のために、sortedを使用したRodの答えは、ソートされた順序でdictのキーを走査するために使用できます。

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

また、TupleはTupleの最初のメンバーによって順序付けられているため、itemsでも同じことができます。

for key, val in sorted(my_dict.items()):
    print key, val
    ...
2
davidavr

文字列データについて

 output = []

     def uniq(input):
         if input not in output:
            output.append(input)
 print output     
1
user2515605