如何用Pythonic方式循环列表并同时获取当前与下一个元素?
Pythonic方式循环列表同时获取当前与下一个元素
要实现你需要的无限循环遍历,同时获取当前元素和下一个元素,可以借助itertools模块的cycle和islice来实现,这是非常Pythonic的方案:
封装成MAGIC函数的实现
from itertools import cycle, islice def MAGIC(seq): seq_cycle = cycle(seq) # 将原循环序列与偏移一位的循环序列配对 return zip(seq_cycle, islice(seq_cycle, 1, None)) stuff = ['a', 'b', 'c', 'd'] print(stuff) for curr_item, next_item in MAGIC(stuff): print("current:", curr_item) print("next:", next_item)
直接在循环中使用的简化写法
如果不需要封装函数,也可以直接在循环里组合两个迭代器:
from itertools import cycle, islice stuff = ['a', 'b', 'c', 'd'] print(stuff) for curr_item, next_item in zip(cycle(stuff), islice(cycle(stuff), 1, None)): print("current:", curr_item) print("next:", next_item)
原理说明
cycle(stuff)会创建一个无限循环遍历stuff的迭代器;islice(cycle(stuff), 1, None)会从循环序列的第二个元素开始取,相当于把原循环序列偏移了一位;zip将两个迭代器配对,每次迭代就能得到当前元素和对应的下一个元素,当遍历到最后一个元素d时,下一个元素会回到a,实现无限循环的效果。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

