好吧,我不认为你可以用这种或那种方式来存储唯一单词的总数。collections.Counter可能是最简单的方法,如您所述。在
如果内存使用是一个问题,您可以尝试将结果存储在numpy数组中,尽管它对于这种特殊情况不是非常合适/最佳的。在
同样,无论数据集有多大,都只有^{} unique words in English(而且可能只有10%的数据集在使用中),因此假设平均长度为每个字10个字符,每个字符1个字节,相应的内存大小在C中只有~10mb,也就是说,考虑到Python开销和unicode,可能只有~100MB。实际上,生成一个包含10**6个随机的10个字符长单词的dict需要115MB,所以在任何现代系统中存储都不成问题。在In [14]: import string
...: import random
...: import itertools
...: %load_ext memory_profiler
...:
...: def gen_dict(n):
...: out = {}
...: for i, name in enumerate(itertools.product(string.letters, repeat=10)):
...: if i > n: break
...: out[''.join(name)] = random.randint(0, N)
...: return out
...:
...: N = 1000000
...: %memit x = gen_dict(N)
...: print(len(x.keys()))
...:
peak memory: 150.45 MiB, increment: 116.52 MiB
1000001