我想为列表中的所有元组添加索引(通过创建新列表?)。我将举例说明我的尝试。我希望让操作更快,我感谢任何建议。
假设我正在进行某次迭代
L = [(1463270, 0.681), (1432058, 0.678), (537044, 0.677), (252225, 0.677), (1222737, 0.676)]
这里L包含5个元组,但实际上我在一个列表中处理了数十万个元组。
我希望为L中的每个元组添加索引
L = [(1463270, 0.681, 1), (1432058, 0.678, 2), (537044, 0.677, 3), (252225, 0.677, 4), (1222737, 0.676, 5)]
我需要计算最终得分的指数,我试过这个:
iL = []
for i in range(1,top+1): ## top = 5 in my example
iL.append(L[i-1] + (i,))
但我真的希望避免在top = 500,000并且拥有3,000,000次迭代时使用这样的循环。是否有方法可以使用地图来解决我的问题?
答案 0 :(得分:4)
使用list comprehension比使用public void render(SpriteBatch sb) {
sb.setProjectionMatrix(cam.combined);
sb.begin();
String s = Integer.toString(SCORE);
String h = Integer.toString(highscore);
sb.draw(bg,cam.position.x - (cam.viewportWidth /2),0);
sb.draw(groud,groundpos1.x,groundpos1.y);
sb.draw(groud,groundpos2.x,groundpos2.y);
font.draw(sb,s,cam.position.x-font.getSpaceWidth(),cam.position.y+(cam.viewportHeight /2)-39);
high.draw(sb,h,cam.position.x- (cam.viewportWidth /2),cam.position.y+(cam.viewportHeight /2)-39);
sb.end();
}
几乎肯定更快。 enumerate
是向列表中的内容添加索引的好方法;您只需重新排序它可以获得所需输出的内容:
append
另外,请考虑:您是否需要使用索引存储此新列表?仅仅为几十万个元组分配内存需要时间。如果您仅仅使用这个新列表,您可能会考虑使用generator expression,它会懒惰地评估并且不需要分配内存。