2016-03-27 8 views
5

私はPythonのリストから重複を取り除く関数を書こうとしていました。リストを変換するときにセットが順序付けされるのはなぜですか?

私はこれを行った後、リストをセットに変換してリストに戻してソートしていました。

>>> l = [9,10,10,11,1,1,1,22,2,2,2] 
>>> s = set(l) 
>>> s 
set([1, 2, 9, 10, 11, 22]) 
>>> l2 = list(s) 
>>> l2 
[1, 2, 9, 10, 11, 22] 
>>> l2 = list(set(l)) 
>>> l2 
[1, 2, 9, 10, 11, 22] 
>>> 

セットs(それを印刷するときに、少なくとも注文)注文される:ここでは

は、スクリプトがあります。

セットが注文されるのはなぜですか?私はこれを実行することにより、重複を削除する場合

そして、何が時間複雑です:

def remove_duplicates(nums): 
    return list(set(nums)) 
+0

は、簡単に言えばlist(collections.OrderedDict.fromkeys(data))を:: 'set'オブジェクトを任意に並べられ

もO(n)は、このイディオムを使用して、任意の順序を克服するために。 – TigerhawkT3

+2

@ TigerhawkT3閉鎖にあまり積極的にしないでください。ちょうど任意のセット注文よりも多くのことがあります。 –

+0

'set_l = [l.index(x)== iなら列挙する(i、x)のx]' –

答えて

6

list(set(data))アプローチのために実行している時間はO(n)があります。

このセットは、整数がハッシュされる方法のアーティファクトとして表示されます。他の入力では、データはソートされた順序から離れてスクランブルされます。

+1

Gocha!あなたが正しいです。私はいくつかの非常に大きな数字でそれをテストした後、返されたリストは注文されていませんでした。どうもありがとうございました。 – xhanshawn

+0

あなたの新しいアプローチはO(n log n)ですか? –

+0

@TimothyShieldsそうではありません。比較の回数はO(n)です。これは計器を介して簡単に確認できます。 –

関連する問題