LeetCode反转字符串题中s[:]=s[::-1]与s=s[::-1]的区别是什么?
核心原因是两种写法对列表的操作逻辑完全不同,和题目的要求直接相关
这道LeetCode题明确要求不返回新对象,仅原地修改输入的列表s,两种写法的差异如下:
s = s[::-1]的逻辑:s[::-1]会先生成一个全新的、反转后的列表对象,赋值操作只是让函数内的局部变量s指向这个新对象,完全不会修改外部传入的原列表。函数执行结束后,外部传入的列表还是原来的内容,不符合题目要求。s[:] = s[::-1]的逻辑:这是Python的切片赋值语法,会直接修改原列表对象的所有元素,不会改变s的指向,始终操作的是外部传入的那个原始列表,实现了原地修改,符合题目要求。
你可以用下面的测试代码验证差异:
def bad_reverse(s): s = s[::-1] def good_reverse(s): s[:] = s[::-1] test_list = ["a","b","c"] bad_reverse(test_list) print(test_list) # 输出:['a', 'b', 'c'],原列表未修改 good_reverse(test_list) print(test_list) # 输出:['c', 'b', 'a'],原列表已修改
内容的提问来源于stack exchange,提问作者StudentProgrammer12
相关产品推荐
相关产品推荐

