1
在Python 2.7版,以便從字符串的冗餘列表獲取該組唯一的字符串,什麼是首選的(〜千萬字符串長度的〜20):蟒蛇 - 排序和獨特VS集
一)對列表進行排序和刪除重複串
sort(l)
unique(l) #some linear time function
b)只是把它們放在一個組
set(l)
請注意,我不關心的字符串的順序。
在Python 2.7版,以便從字符串的冗餘列表獲取該組唯一的字符串,什麼是首選的(〜千萬字符串長度的〜20):蟒蛇 - 排序和獨特VS集
一)對列表進行排序和刪除重複串
sort(l)
unique(l) #some linear time function
b)只是把它們放在一個組
set(l)
請注意,我不關心的字符串的順序。
我做了一個簡單的測試來檢查兩種解決方案的運行時間。第一個測試創建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
使用'timeit'是進行這種測量的標準方式,但無論如何這是一種正確的方法。測量,不要猜測。 –
你可以用'timeit'模塊是100%肯定,但我會感到非常驚訝它)的工作比乙快),因爲一)要求' O(n + nlogn)'而b)只有'O(n)' – matino