対ユニークなのpython 2.7では、文字列の冗長リストからユニークな文字列のセットを取得するために、どのような好ましい(〜の長さの文字列千万〜20):のpython - 並べ替えの設定
A)ソートリストと繰り返し文字列
sort(l)
unique(l) #some linear time function
Bを削除)だけセットで、私は文字列の順序を気にしない
set(l)
注意をそれらすべてを置きます。
対ユニークなのpython 2.7では、文字列の冗長リストからユニークな文字列のセットを取得するために、どのような好ましい(〜の長さの文字列千万〜20):のpython - 並べ替えの設定
A)ソートリストと繰り返し文字列
sort(l)
unique(l) #some linear time function
Bを削除)だけセットで、私は文字列の順序を気にしない
set(l)
注意をそれらすべてを置きます。
シンプルなテストを行って、両方のソリューションの実行時間を確認しました。最初のテストでは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
'timeit 'を使うのはこの種の測定を行う標準的な方法ですが、とにかく正しい方法です。測定する、推測しないでください。 –
a)は '必要とするため、)あなたは100%を確認するために' timeit'モジュールを使用することができますが、私はそれがa)は速くbより働いていた非常に驚くだろうO(n + nlogn) 'b)O(n)' – matino