咨询以Pythonic方式重复列表首尾元素的最优实现方案
Pythonic方式实现首尾元素重复的列表
将现有列表如
[1, 2, 3, 4, 5],希望仅重复首尾元素得到结果[1, 1, 2, 3, 4, 5, 5]。当前实现代码为:a = [1, 2, 3, 4, 5]; b = [a[0], *a, a[-1]],请问是否存在更符合Pythonic风格的实现方式?
嘿,你的现有实现其实已经相当Pythonic了!不过确实还有几种同样简洁且符合Python风格的写法,我给你梳理一下:
列表拼接法:这是Python里最直观也最常用的列表扩展方式,可读性拉满:
a = [1, 2, 3, 4, 5] b = [a[0]] + a + [a[-1]]这种写法和你的星号展开本质逻辑一致,但对于刚接触Python的人来说可能更容易理解。
itertools.chain高效法:如果你的列表非常大,用itertools.chain可以避免创建中间列表,内存效率更高:from itertools import chain a = [1, 2, 3, 4, 5] b = list(chain([a[0]], a, [a[-1]]))chain会把多个可迭代对象无缝串联起来,只在最后转成列表时才生成完整结果,适合处理大规模数据。生成器表达式(可选):这种写法更紧凑,但可读性稍弱,一般不推荐除非追求极致简洁:
a = [1, 2, 3, 4, 5] b = [x for group in ([a[0]], a, [a[-1]]) for x in group]
最后要强调:你的原代码[a[0], *a, a[-1]]本身就是非常地道的Pythonic写法,星号解包是Python 3.5+引入的便捷语法,简洁又清晰,完全可以继续使用。上面的几种写法只是提供不同场景下的选择~
内容的提问来源于stack exchange,提问作者michezio
相关产品推荐
相关产品推荐

