Python:如何高效实现可迭代对象的无限循环迭代?
高效实现列表的无限循环迭代
需求与现有实现
需要对包含n个元素(n>1)的列表实现无限循环迭代,遍历至末尾时自动重启,核心诉求为迭代速度最优,因此禁止使用自定义方法或try-catch语句。
当前通过维护索引实现玩家轮换逻辑,代码如下:
class Player(): pass # 玩家类的具体实现省略 # 初始化 players = [Player(), Player(), Player()] current_player_index = 0 current_player = players[current_player_index] # 游戏循环 turn_count = 0 while(turn_count < 100): # 自定义最大回合数 turn_count += 1 current_player_index += 1 if current_player_index == len(players): current_player_index = 0 current_player = players[current_player_index]
迭代效果示例要求
若可迭代对象为food=["h","a","m"],连续调用next()十次后,拼接结果需为"hamhamhamh"。
采纳的高效解决方案
使用Python标准库itertools中的cycle方法,该方法专门用于创建无限循环的迭代器,底层实现高效,完全符合速度最优的要求,代码如下:
import itertools class Player(): pass # 玩家类的具体实现省略 # 初始化 players = [Player(), Player(), Player()] players_iterable = itertools.cycle(players) current_player = next(players_iterable) # 游戏循环 turn_count = 0 while(turn_count < 100): # 自定义最大回合数 turn_count += 1 current_player = next(players_iterable)
内容的提问来源于stack exchange,提问作者33fred33
相关产品推荐
相关产品推荐

