在这种情况下更快的是:搜索列表或词典?

时间:2017-12-02 02:09:53

标签: python performance dictionary

说我有一个文本,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个元素。对于我正在做的事情,预先排序是不可行的。

任何想法都表示赞赏。

1 个答案:

答案 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]