-3

声明说:

编写一个非递归(负)函数,它给定一个整数列表(可能是无序的)函数返回相同的列表,其中负数到正的头部和背面(不管它们之间的顺序如何)。该算法可以通过在快速排序中请求类似策略(尽管更简单)分区的形式来解决。

我把这段代码:

def negatius(a):

    fin = len(a) - 1
    i = 0
    b = [i]

    for i in range(len(a)):
        if a[i] < 0:
            b[fin] = a[i]
            i += 1

        else:
            b[fin] = a[i]
            fin += 1

    print "La llista és",b[fin]


a=[1,-2,3,-4,-3,5,6]
negatius(a)

并出现错误:赋值前引用了局部变量'i'。我不明白这个

4

1 回答 1

1

fin从最高索引开始递增,并使用它来访问具有此索引的列表中的元素。这是不对的,因为这些索引不存在。

b[fin] = a[i]

b[fin] = a[i]
fin += 1

print "La llista és",b[fin]

同样在 if 和 else 中,您将附加到列表中。这也没有多大意义。您应该追加一次并在另一种情况下追加

def negatius(a):
    fin = len(a) - 1
    i = 0
    b = [i]
    for i in range(fin):
            if a[i] < 0:
                    b = [a[i]] + b  # prepend a to b
            else:
                    b += [a[i]]     # append a to b

    print "La llista és",b

a=[1,-2,3,-4,-3,5,6]
negatius(a)

印刷

La llista és [-3, -4, -2, 0, 1, 3, 5]

请注意,您将 0 添加到列表中,我怀疑这是否可以。

于 2014-11-19T19:07:52.173 回答