【发布时间】:2015-06-21 21:10:39
【问题描述】:
我有一些值要存储在某个容器中,以便以后仅按位置检索,例如:
index:0
value:(30,6700,3,21543)
index:34
value:(2,1)
index:36
value:(1,2,3,4,5,6,1001,9999)
index:69
value:(11)
其他地方都是空的。其中大约只有 1/4 有值。
稍后我需要通过myList[34]=(2,1,9999,999999,9999999) 之类的操作来访问和修改(附加)这些值。
那么我需要这样做:是9999 in myList[34]?是120 in myList[34]?
我不知道是否应该创建一个字典来将它们存储为键值对,或者使用一个列表。列表似乎是最直观的方式,但列表中的大部分位置都会是空的。
列表或字典哪个更快?或者还有其他时间性能更好的数据容器吗?
时间是我最关心的问题。我昨天写了一小段代码,它已经运行了 20 多个小时。我很沮丧:-(
【问题讨论】:
-
如果您的索引将是整数(而不是浮点数),那么 dict 是最好的选择,特别是如果您想稍后添加/删除内容。列出 100 项的清单只是为了在几个地方有实际价值是不可行的。
-
看起来你想要的是集合的字典而不是元组的列表。集合成员资格测试是 O(1) 平均情况。字典查找也是 O(1) 平均情况。
-
这里有一本字典更好。它们对您来说似乎不那么直观,因为您使用它们的频率不如列表。事实上,存储键:值对正是您想要做的,因此字典应该是直观的解决方案。
-
“时间是我最关心的问题”。如果这是真的,那么浪费的列表空间可能无关紧要。
-
您的代码很慢可能不是因为您选择的数据结构,而是因为您正在执行诸如循环数十万个条目之类的操作,而 Python 中的循环速度很慢。使用 dict 因为它比此处的列表更自然,但请考虑分析您的代码以查看真正的问题。
标签: python containers