问题是编写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)
Run Code Online (Sandbox Code Playgroud)
而且效果很好.但是由于我所拥有的空闲时间,我修改了一下并编写了这段代码:
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)
Run Code Online (Sandbox Code Playgroud)
这次它没用.但在那之后,我读了一些关于如何在python中将值赋值给不同的内容.
但是我仍然想知道,根据你的说法,第二个代码是错的,这样我就可以交叉检查并讨论我认为出了什么问题!那是我的第一个问题.
我的第二个问题是如何在python列表中进行值的交换?它与简单值会发生什么不同?因为上面的代码似乎都适用.但我无法弄明白这一点我可以让自己理解,而且它进一步让我感到困惑,那就是python如何操纵它的列表.
我确信在Python语言的设计中有一些我不知道导致所有这些混淆的东西.帮助我解决它们,如果可能的话,使用一些图片可视化.那么我很容易理解发生了什么!
mat*_*yce 12
这就是原因:
def swap(x,y):
x, y = y, x
Run Code Online (Sandbox Code Playgroud)
这只是交换了本地名称.x然后将相等y,反之亦然,但仅限于该功能内部.在该功能之外(全局范围),没有任何改变.
假设:
x = a[i]
y = a[n]
Run Code Online (Sandbox Code Playgroud)
要交换列表中的值,您必须设置它们:
a[n] = x
a[i] = y
Run Code Online (Sandbox Code Playgroud)
这和:
a[i], a[n] = y, x
Run Code Online (Sandbox Code Playgroud)
而且,由于y = a[n]和x = a[i],这是一样的:
a[i], a[n] = a[n], a[i]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24727 次 |
| 最近记录: |