2016-06-29 4 views
1

対ユニークなのpython 2.7では、文字列の冗長リストからユニークな文字列のセットを取得するために、どのような好ましい(〜の長さの文字列千万〜20):のpython - 並べ替えの設定

A)ソートリストと繰り返し文字列

sort(l) 
unique(l) #some linear time function 

Bを削除)だけセットで、私は文字列の順序を気にしない

set(l) 

注意をそれらすべてを置きます。

+0

a)は '必要とするため、)あなたは100%を確認するために' timeit'モジュールを使用することができますが、私はそれがa)は速くbより働いていた非常に驚くだろうO(n + nlogn) 'b)O(n)' – matino

答えて

2

シンプルなテストを行って、両方のソリューションの実行時間を確認しました。最初のテストではsetが作成され、2番目のテストではリストがソートされます(単純化のために重複は削除されません)。

ソートがO(nlogn)であるのに対して、複雑さがO(n)であるため、セットの作成はソートよりもはるかに高速です。

import random 
import string 
import time 


def random_str(): 
    size = random.randint(10, 20) 
    chars = string.ascii_letters + string.digits 
    return ''.join(random.choice(chars) for _ in range(size)) 


l = [random_str() for _ in xrange(1000000)] 

t1 = time.clock() 
for i in range(10): 
    set(l) 
t2 = time.clock() 
print(round(t2-t1, 3)) 

t1 = time.clock() 
for i in range(10): 
    sorted(l) 
t2 = time.clock() 
print(round(t2-t1, 3)) 

私が得た出力:

2.77 
11.83 
+0

'timeit 'を使うのはこの種の測定を行う標準的な方法ですが、とにかく正しい方法です。測定する、推測しないでください。 –

関連する問題