Python如何实现列表从第二个元素遍历至末尾后再遍历首个元素
错误原因
你的代码无法正常运行的核心问题是:x[0]是单个整数值,不是可迭代对象,不能直接和切片返回的列表x[1:]做拼接操作,运行时会抛出TypeError: can only concatenate list (not "int") to list错误。
实现方案
所有方案都不会修改原始列表,天然支持任意长度≥2的列表,完全覆盖你要求的2-10元素长度适配场景。
方案1:修正切片拼接(最简洁推荐)
只需要把首元素包装成单元素列表再拼接即可,全程操作的都是切片/拼接生成的临时新列表,不会触碰原始列表:
x = [2, 133, 24] for i in x[1:] + [x[0]]: print(i)
运行输出和预期完全一致:
133 24 2
逻辑说明:
x[1:]是切片操作,返回从索引1(第二个元素)到列表末尾的新列表,原列表不会被修改[x[0]]是把原列表第一个元素包装成独立的单元素新列表- 两个新列表拼接后得到符合遍历顺序的临时序列,遍历完成后临时序列会被自动回收,原列表始终保持初始状态。
方案2:分段遍历(无临时列表开销)
如果不想生成拼接后的临时列表,可以把遍历拆成两段,逻辑更直白,同样不会修改原列表:
x = [2, 133, 24] # 先遍历第二个到最后一个元素 for i in x[1:]: print(i) # 单独遍历第一个元素 print(x[0])
如果要把所有迭代对象放在同一个for语句里,也可以用元组解包写法,效果和方案1一致:
for i in (*x[1:], x[0]): print(i)
适配性验证
以上方案对2-10长度的列表都能输出正确顺序:
- 长度为2的列表
['a', 'b'],遍历输出为b、a - 长度为10的列表
[0,1,2,3,4,5,6,7,8,9],遍历输出为1、2、3、4、5、6、7、8、9、0
你可以在遍历前后打印原列表x验证,元素值和顺序都不会发生任何改动。
内容的提问来源于stack exchange,提问作者Jacek
相关产品推荐
相关产品推荐

