如何交换Python列表中的项?

2024-04-29 20:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是编写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语言的设计中,有一些东西我不知道会导致这些混乱。帮我把它们分类,如果可能的话,使用一些图片可视化。那我就很容易明白发生了什么事!!


Tags: 代码in列表forlenreturnifdef
3条回答

如果列表仅由数字组成:

A[i] = A[i] + A[n]
A[n] = A[i] - A[n]
A[i] = A[i] - A[n]

第一个问题:

这就是原因:

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]

swap函数正在交换局部变量xy,而不是全局数组。

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

这是完全错误的

您可以改为执行以下操作

  • 将函数体更改为

    return y,x 并将函数调用为a[n],a[i] = swap(a[i],a[n])

  • 或者直接就地交换a[n],a[i] = a[i],a[n]

  • 或者像你以前那样做

相关问题 更多 >