在Python上列出变异
发布时间:2020-12-20 12:40:34 所属栏目:Python 来源:网络整理
导读:我尝试通过使用第一个元素交换列表和另一个引用列表之间的公共元素来改变列表.实现如下所示: L = [1,2,3,4,5,6,7,8,9] A = [3] L[0],L[L.index(A[0])] = L[L.index(A[0])],L[0] #want to swap 3 with 1 L [1,9,] #List L was not mutated 该清单没有像我预
我尝试通过使用第一个元素交换列表和另一个引用列表之间的公共元素来改变列表.实现如下所示:
>>> L = [1,2,3,4,5,6,7,8,9] >>> A = [3] >>> L[0],L[L.index(A[0])] = L[L.index(A[0])],L[0] #want to swap 3 with 1 >>> L [1,9,] #List L was not mutated 该清单没有像我预期的那样发生变异.但是,当我修改如下所示的实现时,它工作: >>> L = [1,9] >>> A = [3] >>> i = L.index(A[0]) >>> L[0],L[i] = L[i],L[0] >>> L [3,1,] #Now list mutated as desired even though L[i] and L[L.index(A[0])] evaluate to same value. 我的问题是,为什么第一个作业不能改变名单?我想到了,但我的大脑很好地解释了它. 解决方法
问题是这两者并不相同.第一个例子类似于:
>>> L = [1,9] >>> A = [3] >>> i = L.index(A[0]) >>> L[0] = L[i] >>> i = L.index(A[0]) >>> L[i] = L[0] 这意味着您最终交换,然后找到您刚刚交换的元素并交换回来. 您感到困惑的原因是您正在考虑将元组赋值为Python同时执行这两项操作 – 这不是执行执行的方式,而是按顺序执行,这会更改结果. 值得注意的是,即使它确实有效,它也是一种次优的方式. list.index()不是一个特别快的操作,所以无缘无故地做两次并不是一个好主意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |