说我有一个文本,50,000个单词,我想检查文本中的每个单词,看看是否已经遇到过。是否会更快:
a) double_checker = []
for word in text:
if word not in double_checker:
double_checker.append(word)
[perform operations]
b) double_checker = {'a':[], 'b':[], 'c':[], 'd':[], 'e':[], 'f':[],
'g':[], 'h':[], 'i':[], 'j':[], 'k':[], 'l':[],
'm':[], 'n':[], 'o':[], 'p':[], 'q':[], 'r':[],
's':[], 't':[], 'u':[], 'v':[], 'w':[], 'x':[],
'y':[], 'z':[]}
for word in text:
if word not in double_checker[word[0].lower()]:
double_checker[word[0].lower()].append(word)
[perform operations]
我将自己测试,但我的代码需要大约一个小时才能运行,所以我想知道是否有理论计算。我知道列表是O(N)并且dict工作的速度更快,但是dict方法也必须搜索大约1/26大小的列表(显然会有比'z'更多的'e'条目)和每次访问每个单词的第0个元素。对于我正在做的事情,预先排序是不可行的。
任何想法都表示赞赏。
答案 0 :(得分:2)
将单词本身存储为字典键。快得多。
double_checker = {}
for word in text:
if word not in double_checker:
double_checker[word] = 1
else:
double_checker[word] += 1
[do operations]