非递减序列

时间:2016-09-12 22:36:58

标签: python sequence

我正在尝试编写一个简单的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 个答案:

答案 0 :(得分:1)

newSeq = seq

此行不符合您的想法。具体来说,它创建新列表。它只是创建一个引用现有列表的新名称。尝试:

newSeq = seq[:]

答案 1 :(得分:1)

执行以下任务时:

newSeq = seq

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

  

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

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

newSeq = seq.copy()