我有一个包价值:
{'1': 2, '2': 1,'6': 3, '3': 5}
这意味着:
{'1', '1', '2','6', '6', '6', '3', '3', '3', '3'}
我这样做:
按键排序,因此变为:{'1': 2, '2': 1, '3': 5,'6': 3}
获取第N个值。所以如果我想要第3个值,它应该返回'2'
def getNth(scores, rank):
scores = sorted(scores.items(), key=operator.itemgetter(0))
total = 0
for score, cnt in scores:
total += cnt
if total > rank:
return score
我想知道我能快点吗?
答案 0 :(得分:0)
如果你不在这里重新生成分数,你可以(根据我在下面的实验中)将运行时减半:
scores = sorted(scores.items(), key=operator.itemgetter(0))
我创建了一个避免这种情况的修改方法:
def getNth2(scores, rank):
total = 0
for i in sorted(scores.keys()):
total += scores[i]
if total > rank:
return i
测量运行时here:
start_time = time.time()
for i in xrange(0,100000):
for i in xrange(0,10):
getNth(d, i)
end_time = time.time()
print 'Old Runtime:', end_time - start_time
start_time = time.time()
for i in range(0,100000):
for i in xrange(0,10):
getNth2(d, i)
end_time = time.time()
print 'New Runtime:', end_time - start_time
旧运行时间:2.22607803345
新运行时:1.09168481827