Python 3.x Python3递归,for循环,函数返回奇怪的输出
我的函数Python 3.x Python3递归,for循环,函数返回奇怪的输出,python-3.x,list,recursion,return,Python 3.x,List,Recursion,Return,我的函数组合(ary,p)用于返回列表中项目顺序的所有可能的组合。 但它总是多次返回第一个值,即使它找到了所有可能的订单,我知道这是因为它打印了它们。 编辑:我想让它工作我自己,学习一些东西,而不是使用任何外部库。 最后一个列表可以包含所有可能的订单,但它只有输入值顺序,即使它打印每个订单。那么我把返回的放在哪里了?你的问题是只有一份ary。您多次将其附加到bary。所以巴里也有同样的一张单子。任何时候你改变方向。这将反映在所有的列表中,因为它们都是相同的列表 相反,当您附加到bary时,
组合(ary,p)
用于返回列表中项目顺序的所有可能的组合。
但它总是多次返回第一个值,即使它找到了所有可能的订单,我知道这是因为它打印了它们。
编辑:我想让它工作我自己,学习一些东西,而不是使用任何外部库。
最后一个列表可以包含所有可能的订单,但它只有输入值顺序,即使它打印每个订单。那么我把返回的放在哪里了?你的问题是只有一份ary。您多次将其附加到bary。所以巴里也有同样的一张单子。任何时候你改变方向。这将反映在所有的列表中,因为它们都是相同的列表
相反,当您附加到bary时,请指定ary的一个副本,但将其作为自己的新列表,以便在更改ary时不会受到影响
def组合(ary,p):
ln=len(ary)
巴里=[]
对于范围内的a(ln-p):
如果p=ln-2:
追加(ary[:])#将此行更改为获取ary的浅拷贝
打印('ary',ary',bary',bary)
ary.append(ary.pop(p))
返回酒吧
打印(组合([7,3,2],0))
输出
ary [7, 3, 2] bary [[7, 3, 2]]
ary [7, 2, 3] bary [[7, 3, 2], [7, 2, 3]]
ary [3, 2, 7] bary [[3, 2, 7]]
ary [3, 7, 2] bary [[3, 2, 7], [3, 7, 2]]
ary [2, 7, 3] bary [[2, 7, 3]]
ary [2, 3, 7] bary [[2, 7, 3], [2, 3, 7]]
[[7, 3, 2], [7, 2, 3], [3, 2, 7], [3, 7, 2], [2, 7, 3], [2, 3, 7]]
为什么不在这里使用itertoolsprint(list(itertools.permutations([7,3,2]))
如果我无法修复它,我最终不得不修复它,但我不会学到任何东西,我更愿意自己尽可能多地制作它。也许可以补充一点,bary
中充满了对ary
的引用?非常感谢,我从来没有想到会发生这样的事情。我本来会给你投票的,但我没有足够的分数。
def combinations(ary, p):
ln = len(ary)
bary=[]
for a in range(ln-p):
if p<ln-2:
bb = combinations(ary, p+1)
for be in bb:
bary.append(be)
if p>=ln-2:
--> bary.append(ary)
--> print('ary', ary, 'bary', bary)
ary.append(ary.pop(p))
return bary
## There is clearly every possible combination:
##
## ||
## ||
\/
ary [7, 3, 2] bary [[7, 3, 2]]
ary [7, 2, 3] bary [[7, 2, 3], [7, 2, 3]]
ary [3, 2, 7] bary [[3, 2, 7]]
ary [3, 7, 2] bary [[3, 7, 2], [3, 7, 2]]
ary [2, 7, 3] bary [[2, 7, 3]]
ary [2, 3, 7] bary [[2, 3, 7], [2, 3, 7]]
[[7, 3, 2], [7, 3, 2], [7, 3, 2], [7, 3, 2], [7, 3, 2], [7, 3, 2]]
ary [7, 3, 2] bary [[7, 3, 2]]
ary [7, 2, 3] bary [[7, 3, 2], [7, 2, 3]]
ary [3, 2, 7] bary [[3, 2, 7]]
ary [3, 7, 2] bary [[3, 2, 7], [3, 7, 2]]
ary [2, 7, 3] bary [[2, 7, 3]]
ary [2, 3, 7] bary [[2, 7, 3], [2, 3, 7]]
[[7, 3, 2], [7, 2, 3], [3, 2, 7], [3, 7, 2], [2, 7, 3], [2, 3, 7]]