能否仅用单个一维列表实现元素逆序?禁用内置函数
How to reverse a list in-place without using built-in functions or a new list?
Problem Details
我编写了如下Python代码:
list = ["Python", "is", "good", "program"] newlist = [] for i in range(1, len(list)+1): newlist.append(list[-i]) print(newlist)其输出为
['program', 'good', 'is', 'python'],代码目的是实现列表元素的逆序排列。但我使用了新列表newlist,能否仅使用原列表list完成该功能?
补充说明:因学校要求,禁止使用内置函数或现成代码,请基于我的现有代码提供解决方案。
Solution
当然可以!既然不能用新列表,也不能用内置的reverse()或者切片[::-1]这类现成方法,咱们可以通过交换原列表两端的元素来实现原地逆序,完全基于你现有的循环思路来调整。
核心思路是:只需要循环到列表的中间位置,把第i个元素和倒数第i+1个元素交换位置——这样所有操作都在原列表上完成,不需要额外创建新列表。
Modified Code
# 建议不要用list作为变量名,这里改成my_list避免覆盖内置类型 my_list = ["Python", "is", "good", "program"] # 循环到列表长度的一半,每个元素仅交换一次 for i in range(len(my_list) // 2): # 用临时变量保存元素,避免直接赋值覆盖 temp = my_list[i] my_list[i] = my_list[-i - 1] my_list[-i - 1] = temp print(my_list)
Code Explanation
- 变量名从
list改为my_list:list是Python的内置类型,用它当变量名会覆盖内置功能,这是编程里的小细节哦~ len(my_list) // 2:取列表长度的整数一半,比如长度为4时循环2次(i=0和i=1),刚好交换前两个和后两个元素;如果是奇数长度的列表,中间的元素不需要移动,循环到中间前一个位置就足够了。- 临时变量
temp:用来暂存要交换的元素,防止直接赋值时丢失原有的元素值。
运行这段代码后,原列表my_list就会被逆序,输出结果和你原来的代码一致:['program', 'good', 'is', 'Python'],完全满足你的需求~
内容的提问来源于stack exchange,提问作者user9654395
相关产品推荐
相关产品推荐

