Python自定义swap函数交换列表元素仅替换不互换问题求助
问题原因
- 核心逻辑缺陷:你当前的
swap函数仅执行了一次赋值操作mylist[x] = mylist[y],执行这一步时mylist[x]的原始值会被直接覆盖,没有提前保存该值用于回写mylist[y]的位置,最终两个索引位置的值都会等于原本的mylist[y],也就是你观察到的重复d的问题。 - 复用性缺陷:函数内部直接引用全局变量
mylist,只能针对这一个列表做交换操作,无法复用到其他列表场景。
修改方案
方案1:临时变量存储原始值(全语言通用写法)
先把要交换的其中一个值提前存到临时变量,避免被覆盖后丢失:
def swap(lst, x, y): # 存储x位置的原始值 temp = lst[x] lst[x] = lst[y] lst[y] = temp mylist = ["a", "b", "c", "d"] swap(mylist, 2, 3) print(mylist)
运行输出:['a', 'b', 'd', 'c'],符合预期。
方案2:Python元组解包语法(更简洁的原生写法)
Python原生支持无需临时变量的元素交换操作,语法更简洁:
def swap(lst, x, y): lst[x], lst[y] = lst[y], lst[x] mylist = ["a", "b", "c", "d"] swap(mylist, 2, 3) print(mylist)
运行效果和方案1完全一致。
内容的提问来源于stack exchange,提问作者afloated_
相关产品推荐
相关产品推荐

