Python原地重排列表:偶数索引元素逆序前置,奇数索引后置
原地修改列表:偶数索引元素逆序前置 + 奇数索引元素后置的解法
嘿,作为Python新手碰到这种原地修改的要求确实容易踩坑——你原来的写法l = l[::-2] + l[1::2]其实是创建了一个全新的列表,然后把变量l重新指向这个新列表,原来的列表对象根本没被修改,难怪会被判定不符合要求!
正确的原地修改思路
Python里要实现原地修改列表,关键是用切片赋值(l[:] = ...),这种方式会直接修改原列表内部的元素,而不是重新绑定变量引用。
直接上可行的代码:
l = [0, 1, 2, 3, 4, 5, 6] # 原地替换原列表的所有内容:偶数索引逆序 + 奇数索引元素 l[:] = l[::-2] + l[1::2] print(l) # 输出: [6, 4, 2, 0, 1, 3, 5]
为什么这个写法符合要求?
l[::-2]会取出所有偶数索引的元素并逆序(原列表索引0、2、4、6的元素是0,2,4,6,逆序后就是6,4,2,0)l[1::2]取出所有奇数索引的元素(1,3,5)- 把这两部分拼接后,通过
l[:] = ...赋值给原列表的整个切片,这一步是直接修改原列表的元素,完全属于原地操作,没有创建新的列表对象来替换原变量的引用。
再强调下原地修改的核心区别
- 错误写法
l = ...:改变的是变量l的指向,原列表对象没被修改(如果没有其他引用就会被回收) - 正确写法
l[:] = ...:直接修改原列表对象的内容,变量l始终指向同一个列表对象,满足原地修改的要求
内容的提问来源于stack exchange,提问作者Nauman Shahid
相关产品推荐
相关产品推荐

