You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中将可迭代对象首元素追加至末尾,求更简洁的itertools实现方案

优化“闭合循环”可迭代对象的实现

你的原代码逻辑通顺,这里提供几种更简洁高效的实现方式,基于itertools和more_itertools:

基于itertools的精简实现

用单元素元组替代列表传递单个元素(元组创建更轻量、性能更优),避免不必要的列表容器开销:

from collections.abc import Iterable
from itertools import chain

def close_loop(iterable: Iterable) -> Iterable:
    iterator = iter(iterable)
    first = next(iterator)
    # 单元素元组比列表更高效,符合迭代器的轻量特性
    return chain((first,), iterator, (first,))

测试效果与原代码完全一致:

list(close_loop(range(5)))  # [0, 1, 2, 3, 4, 0]
''.join(close_loop('abc'))  # 'abca'

基于more_itertools的优雅实现

利用more_itertools.peekable可查看迭代器首个元素且不消耗迭代器的特性,结合append函数直接在迭代器末尾追加元素,逻辑更直观:

from collections.abc import Iterable
from more_itertools import peekable, append

def close_loop(iterable: Iterable) -> Iterable:
    it = peekable(iterable)
    # peek获取首个元素,append直接完成末尾追加操作
    return append(it, it.peek())

这个版本无需手动拆分迭代器的首个元素与剩余部分,代码更简洁,业务意图也更清晰。

如果不想依赖append,也可以直接用chain配合peekable实现:

from collections.abc import Iterable
from itertools import chain
from more_itertools import peekable

def close_loop(iterable: Iterable) -> Iterable:
    it = peekable(iterable)
    return chain(it, (it.peek(),))

内容的提问来源于stack exchange,提问作者VY_CMa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:05:09