您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

迭代地交换Python中的元素

5b51 2022/1/14 8:21:36 python 字数 2327 阅读 507 来源 www.jb51.cc/python

我无法理解这个简单的代码片段幕后发生的事情:def changeArray(arr): for i in range(len(arr)): arr[i], arr[arr[i] - 1] = arr[arr[i] - 1], arr[i] print(arr) return(arr) 该代码假定数组的元

概述

我无法理解这个简单的代码片段幕后发生的事情:

def changeArray(arr):
     for i in range(len(arr)):
         arr[i],arr[arr[i] - 1] = arr[arr[i] - 1],arr[i]
         print(arr)
     return(arr)

代码假定数组的元素为1到n的整数.
输入为[1,3,4,2]时给定代码输出为:

[1,2]
[1,3]
[1,3]
Out[8]: [1,3]

虽然我期待它打印并返回:

[1,2,4]
Out[8]: [1,4]

代码只交换元素时,为什么值会发生变化?

编辑:

事实证明,更改交换顺序可以解决问题:

def changeArray(arr):
     for i in range(len(arr)):
         arr[arr[i]-1],arr[i] = arr[i],arr[arr[i]-1]
         print(arr)
     return(arr)

这给出了以下输出

[1,4]

改变订单是如何按预期进行交换的,反过来又完成了其他事情?

当你写这个:

 arr[i],arr[i]

它大致相当于:

tup = arr[arr[i] - 1],arr[i]
x,y = tup
arr.__setitem__(i,x)
arr.__setitem__(arr[i] - 1,y)

(关于如何翻译这个的全部细节是in the reference docs,但希望这个更直观的想法更简单.)

哪个应该明确为什么你得到你的结果.以及为什么以下所有做你想做的事情:

x = arr[i] - 1
arr[i],arr[x] = arr[x],arr[i]

arr[arr[i] - 1],arr[arr[i] - 1]

def swap(x,y):
    arr[x],arr[y] = arr[y],arr[x]
swap(i,arr[i] - 1)

我认为第一个是最简单的(第二个看起来很简单,但只是误导性的).

总结

以上是编程之家为你收集整理的迭代地交换Python中的元素全部内容,希望文章能够帮你解决迭代地交换Python中的元素所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶