我需要在内存中存储一大串数字。然后我需要检查会员资格。数组在内存效率方面优于列表。集合比列表更适合成员资格检查。我两者都需要!所以我的问题是:
数组的效率比1)多多少?(相反,请参阅下面的结果)。
2) 有没有一种数据结构可以更好地平衡集合和数组?像是有符号整数类型的集合?或者一些裸体建筑?在
我用下面的脚本检查了成员时间的差异。(我知道时间比较好,但方差很小,足以让时间过得很好):import array
import time
class TimerContext:
def __enter__(self):
self.t0 = time.time()
def __exit__(self, *args, **kwargs):
print(time.time()-self.t0)
SIZE = 1000000
l = list([i for i in range(SIZE)])
a = array.array('I', l)
s = set(l)
print(type(l))
print(type(a))
print(type(s))
with TimerContext():
x = 99999 in l
with TimerContext():
x = 99999 in a
with TimerContext():
x = 99999 in s
结果:
^{pr2}$
所以集合对于成员资格检查要快得多(请注意科学的符号)。因此,如果它们的内存占用与数组没有那么大的不同,我更喜欢使用set。但我不知道如何检查内存占用。在
我还要补充一点,比较集合和列表有很多问题。但是在比较数组和集合时,我没有看到任何好的答案。在