2016-06-29 51 views
1

在Python 2.7版,以便從字符串的冗餘列表獲取該組唯一的字符串,什麼是首選的(〜千萬字符串長度的〜20):蟒蛇 - 排序和獨特VS集

一)對列表進行排序和刪除重複串

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

b)只是把它們放在一個組

set(l) 

請注意,我不關心的字符串的順序。

+0

你可以用'timeit'模塊是100%肯定,但我會感到非常驚訝它)的工作比乙快),因爲一)要求' O(n + nlogn)'而b)只有'O(n)' – matino

回答

2

我做了一個簡單的測試來檢查兩種解決方案的運行時間。第一個測試創建set,第二個測試對列表進行排序(爲了簡單起見,它不會刪除重複項)。

如預期的那樣,創建集合比排序快得多,因爲它的複雜性是O(n),而排序是O(nlogn)

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'是進行這種測量的標準方式,但無論如何這是一種正確的方法。測量,不要猜測。 –