迭代多个列表(没有性能下降)

Mic*_*bor 0 python performance list

我正在写一个游戏,而在True中:循环我有一个重新绘制游戏状态的代码.

我有几个不同种类的物品清单(宇宙飞船,横梁,星星) - 所有这些都是为了提高性能.

我需要把它们全部画出来.我可以:

for spaceship in spaceships:
    screen.blit(spaceship.image, (spaceship.x, spaceship.y))
for beam in beams:
    screen.blit(beam.image, (beam.x, beam.y))
...
Run Code Online (Sandbox Code Playgroud)

但我觉得这有点违背DRY原则.我觉得它可以做得更好.

我需要的是这样的结构:

for actor in spaceships + beams + stars:
    actor.move()
    screen.blit(actor.image, (actor.x, actor.y))
Run Code Online (Sandbox Code Playgroud)

但是一个人不会加入它们(也不会做任何会降低性能的事情).你的想法?

Ste*_*ima 6

使用chainitertools模块:

from itertools import chain
for actor in chain(spaceships, beams, stars):
    actor.move()
    screen.blit(actor.image, (actor.x, actor.y))
Run Code Online (Sandbox Code Playgroud)

来自文档:

创建一个迭代器,它返回第一个iterable中的元素,直到它耗尽,然后进入下一个iterable,直到所有的iterables都用完为止.用于将连续序列作为单个序列处理.

chain 使用延迟评估(例如,没有创建中间列表),因此不会有任何性能下降.