Python如何不使用循环、不占额外空间反转List指定范围的元素?
列表指定区间反转的实现方法
Python 实现
你可以直接用切片赋值结合内置反转逻辑实现,完全满足无手动循环、原地修改的要求:
- 示例代码:
lst = [1,2,3,4,5,6,7,8,9] # 反转下标2到5的区间,Python切片为左闭右开规则,因此结束下标填6 lst[2:6] = lst[2:6][::-1] print(lst) # 输出 [1,2,6,5,4,3,7,8,9]
- 说明:
- 不需要手动编写循环逐位交换元素,反转逻辑由Python内置实现,和直接调用
reverse()方法的底层逻辑同源 - 切片赋值为原地修改操作,不会生成和原列表大小相同的额外副本,仅会产生极小的临时变量开销,符合空间要求
- 不需要手动编写循环逐位交换元素,反转逻辑由Python内置实现,和直接调用
Java 实现
如果你使用Java,可以借助Collections.reverse配合subList方法实现:
- 示例代码:
import java.util.*; public class Main { public static void main(String[] args) { List<Integer> lst = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9)); // subList为左闭右开规则,传入2和6对应下标2到5的区间 Collections.reverse(lst.subList(2,6)); System.out.println(lst); // 输出 [1,2,6,5,4,3,7,8,9] } }
- 说明:
subList返回的是原列表的视图,不会创建新的完整列表对象- 反转操作直接作用于原列表,全程不需要手动写循环交换逻辑,额外空间开销为O(1)
内容的提问来源于stack exchange,提问作者Pallab Tewary
相关产品推荐
相关产品推荐

