我正在尝试编写一个简单的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
答案 0 :(得分:1)
newSeq = seq
此行不符合您的想法。具体来说,它不创建新列表。它只是创建一个引用现有列表的新名称。尝试:
newSeq = seq[:]
答案 1 :(得分:1)
执行以下任务时:
newSeq = seq
实际上将不同的名称(newSeq)绑定到同一个对象(seq),不会创建具有相似值的新对象。因此,当您更改newSeq的内容时,也会更改seq的内容,因为它们都是存储在内存中的同一对象的别名。 正如Python文档所说:
Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。对于可变或包含可变项目的集合,有时需要一个副本,因此可以更改一个副本而不更改另一个副本。
所以你必须用以下代码改变这行代码:
newSeq = seq.copy()