在python 2.7中,为了从冗余的字符串列表中检索一组唯一字符串,首选(〜1000万字符串长度~20):
a)对列表进行排序并删除重复的字符串
sort(l)
unique(l) #some linear time function
b)将它们全部置于一组
中set(l)
请注意,我不关心字符串的顺序。
答案 0 :(得分:3)
我做了一个简单的测试来检查两种解决方案的运行时间。第一个测试创建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