【发布时间】:2016-05-01 15:37:57
【问题描述】:
我有 40.000 个文档,每个文档 93.08 个单词。平均而言,每个单词都是一个数字(可以索引字典),每个单词都有一个计数(频率)。阅读更多here。
我介于两种存储数据的数据结构之间,想知道我应该选择哪一种,Python 人会选择哪一种!
三重列表:
一个列表,其中每个节点:
__ 是一个列表,其中每个节点:
__.... 是两个值的列表; word_id 和 count。
双字典:
一个字典,键为 doc_id 和值字典。
该值字典将以 word_id 作为键,以 count 作为值。
我觉得第一个需要更少的空间(因为它不存储doc_id),而第二个会更容易处理和访问。我的意思是,访问列表中的 i 元素是 O(n),而它在字典中是常量,我认为。我应该选择哪一个?
【问题讨论】:
-
访问列表的第 i 个元素是 O(1)。
-
一个简单的链表是 O(n) @RushyPanchal。
-
访问索引确实是 O(1),但在列表中查找具有未知索引的元素是 O(n)
-
Python 列表不是链表,它们类似于 Java ArrayList 或 C++ 向量。它们是动态增长的数组,您可以通过计算偏移量来随机访问它们。但是,是的,在许多语言中,单词列表默认意味着链表。
-
这里是 Python 列表时间复杂度的一个很好的参考:wiki.python.org/moin/TimeComplexity
标签: python list dictionary document bigdata