python - 如何优化 for 循环 - Python 3
问题描述
第一次发帖,如有错误请见谅!
我正在搞乱 pygame 库,而且我对 python 非常陌生。我创建了 3 个敌人类,它们按预期工作,但是,这就是我让它们移动的方式(我调用存储在类中的移动函数)。
我想知道是否有更干净的方式来做事。我还有很多其他的敌人要编码,而且这看起来很重复,所以这是我做错了什么的迹象。
我尝试创建一个“控制列表”,在其中列出所有敌人列表,并尝试通过它们的索引访问它们,但它不起作用。我也尝试连接,但我收到一个错误,说我无法连接列表名称,另一个错误是我的列表名称变成了字符串(是的,我尝试使用引号)。我敢肯定这将是一个简单的修复,但我花了 3 天的时间来解决它。如果可以的话
到目前为止我的代码示例 - 它位于我的游戏的主运行循环中。
for giant in lst_enemy_giants:
giant.move()
else:
pass
for spider in lst_enemy_spiders:
spider.move()
else:
pass
for goblin in lst_enemy_goblin:
giant.move()
else:
pass
# The pattern the I want
for ENEMY in lst_enemy_ENEMY:
ENEMY.move()
# where ENEMY is any enemy list that can be stored somewhere
解决方案
只需将迭代器链接在一起。
from itertools import chain
for enemy in chain(lst_enemy_giants, lst_enemy_spiders, lst_enemy_goblin):
enemy.move()
这是编写嵌套循环的一种更好的方法,例如
for enemy_list in [lst_enemy_giants, lst_enemy_spiders, lst_enemy_goblin]:
for enemy in enemy_list:
enemy.move()
不相关,但我建议保留一个像
enemies = {'giants': [...], 'spiders': [...], 'goblins': [...]}
而不是三个单独的变量引用单独的列表。例如,您仍然可以enemies['giants']
在任何您曾经使用过的地方使用lst_enemy_giants
,但现在您可以编写
for enemy in chain(*enemies.values()):
enemy.move()
推荐阅读
- python - Modbus python 脚本
- jquery - 基于数据属性而不是类查找元素。- 导轨
- java - 为什么 jpa 不创建表?
- r - 如何不在 R 中按字母顺序进行 dplyr::summarize
- python - 为所有简单的 pip 安装包授予 sudo 权限
- symfony - 预先检查表单实体类型选项
- python - OSMnx - 示例文件的问题
- python - 如何过滤掉python中的等效值列表?
- javascript - 为什么我应该避免在 shouldComponentUpdate 中使用 _.isEqual
- javascript - Javascript,在 prev td 中获取输入值