2016-09-12 43 views
0

我想写一个简单的python脚本,它将查找所有由正整数组成的非递减序列,总和为7.我的代码似乎不工作,因为它应该不管我尝试什么。下面是我有非递减序列

components = [1,2,3,4,5,6,7] 

ans = [] 

def sumSeq(seq): 
    sumA = 0 
    for i in seq: 
     sumA += i 
    return sumA 

def findSeq(seq): 
    for x in components: 
     if (x < seq[-1]): 
      continue 

     newSeq = seq 
     newSeq.append(x) 
     sumA = sumSeq(newSeq) 

     if (sumA > 7): 
      continue 

     if (sumA == 7): 
      ans.append(newSeq) 

     findSeq(newSeq) 

findSeq([0]) 

print ans 

回答

2

当你做对以下分配:

newSeq = seq 

你实际上绑定不同的名称(newSeq)同一个对象(SEQ),你不创建具有相似值的新对象。所以当你改变newSeq的内容时,你也会改变seq的内容,因为它们都是存储在内存中的同一对象的别名。 正如Python文档所说:

Python中的赋值语句不会复制对象,它们会在目标和对象之间创建绑定。对于可变项目或包含可变项目的集合,有时需要副本,以便可以更改一个副本而不更改其他副本。

所以你必须改变这行代码:

newSeq = seq.copy() 
2
newSeq = seq 

此行不会做你认为它。具体来说,它确实不是创建一个新的列表。它只是创建一个引用现有列表的新名称。尝试:

newSeq = seq[:] 
+0

非常感谢! – Antoine