在配备Intel i5、8GB、Windows 7的笔记本电脑上完成下面的循环大约需要190秒。在
count = 0
for l in xrange(NUM_ROOM):
for k in xrange(NUM_SLOT):
for m in xrange(NUM_ACTIVITY):
count = count+1
for dk, [om, ol, ok] in xDict.iteritems():
if dk == (m,l,k):
# do something
我做了一个追踪,发现整个回路是13960 x 19040~2比尔。在
^{pr2}$xDict看起来像这样(一个示例):
xDict = {(19, 4, 118): [19, 4, 4], (4, 12, 25): [4, 12, 7], (15, 19, 121): [15, 19, 21], (23, 5, 219): [23, 5, 9], (13, 5, 19): [13, 5, 1]}
我正试图从字典中找出一个键的值。有什么改进的地方吗?在
对不起,我想我知道发生了什么。在
count = 0
for l in xrange(NUM_ROOM):
for k in xrange(NUM_SLOT):
for m in xrange(NUM_ACTIVITY):
count = count+1
val = xDict.get((m,l,k))
if val != None:
[om, ol, ok] = val
# do something
现在需要1秒
不要只为了找到一个键而遍历所有项目。请改用成员资格测试:
这就不需要为19040次迭代循环13960个项目。在
如果您也在使用}来实现其他功能,那么您还没有告诉我们您要在这里实现什么,但是请考虑只在键上循环;这样您就可以将这一循环减少到13960个项目,而不是19040个迭代。在
m
、l
和{相关问题 更多 >
编程相关推荐