python - 如何交换 Python 列表中的项目?

标签 python python-2.7

问题是编写 python 代码来生成数字 {1,2,3,...,n} 的所有排列。所以,我写了这段代码:

def permute(n):

  if n==len(a):
    print a
    return

  for i in range(n,len(a)):
    swap(i,n)
    permute(n+1)
    swap(i,n)


def swap(x,y):
  a[x],a[y]=a[y],a[x]

a=[1,2,3,4]       #any list 
permute(0)

而且效果很好。但是后来由于我确实有空闲时间,我对其进行了一些修改并编写了以下代码:

def permute(n):

  if n==len(a):
    print a
    return

  for i in range(n,len(a)):
    swap(a[i],a[n])           #modification
    permute(n+1)
    swap(a[i],a[n])           #modification


def swap(x,y):
  x,y=y,x                     #modification

a=[1,2,3,4]
permute(0)

这次没用。但在那之后,我读到了一些关于在 python 中将变量赋值给值的不同之处。

但是我还是想知道,根据您的说法,第二个代码有什么问题,以便我可以交叉检查和讨论我认为哪里出了问题!这是我的第一个问题。

我的第二个问题是如何在 python 列表中交换值?它与简单值会发生什么不同吗?因为上面的两个代码似乎都适用。但是我无法弄清楚我可以让自己理解的方式,而且它进一步让我感到困惑,然后 python 如何操纵它的列表。

我确信在 Python 语言的设计中有一些我不知道的东西会导致所有这些混淆。帮我整理一下,如果可能的话,使用一些图片可视化。那时我很容易理解发生了什么!!

最佳答案

第一个问题:

这是原因:

def swap(x,y):
    x, y = y, x

这只是交换本地名称。 x 将等于 y,反之亦然,但仅限于该函数内部。在该函数(全局范围)之外,什么都不会改变。


第二个问题(你真的应该避免在一个问题中问多个问题):

假设:

x = a[i]
y = a[n]

要交换列表中的值,您必须设置它们:

a[n] = x
a[i] = y

这与:

a[i], a[n] = y, x

并且由于 y = a[n]x = a[i],它与:

a[i], a[n] = a[n], a[i]

关于python - 如何交换 Python 列表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804020/

相关文章:

python - 插入多行到索引

python - 如何分发具有所有依赖项的 python 应用程序

python-2.7 - 如何为centos 6.6设置chromedriver工作以在python中运行selenium测试用例

python - 空列表是否等于 None?

python 将\n as\x0a 传递给 bash 命令行

python - python中的正则表达式技巧

python - 为什么这个程序会重复出现?

python - 如何通过主机名获取主机ID?扎比克斯

python - 如何使用 eyes3 和 python2.7 从 mp3 文件访问发布日期或年份

python - 当我运行Python程序时,pygame窗口打开片刻,然后退出