-1

这是我正在尝试做的一件非常简单的事情,如果我编写一段单独的代码,它甚至可以在 powershell 中工作。但是在我的程序中,它似乎不起作用:

这是我的代码:http: //ideone.com/vV5ZNS

x = list(str(raw_input("Please enter a string: ")))

y = x
z = []
i = 0
j = 1
k = -1
n = len(x)
while i<n:
    i = k + 1
    j = i + 1

    while j<n:
        x = y   #does not reassign the orignal string array to x.
        k = i
        while j<n:
            z.insert(i, x[i])
            if (x[i] == x[j]):
                j = j+1
            else:
                x[i] = x[j]
                x[j] = z[i]
                print (x)
                print "\n"
                j = j+1
                i = i+1
4

1 回答 1

0

听起来您正在尝试将原始输入列表存储在其中,y以便您可以在x程序的中途恢复值。

这目前不起作用,因为y = x导致 x 和 y 都引用同一个列表。修改一个将修改另一个。例子:

>>> x = [1,2,3]
>>> y = x
>>> y.append(4)
>>> print x
[1, 2, 3, 4]

在这里,对 进行了更改y,并x进行了相应的修改。

要保留数组的原始值,您应该复制它。这通常是通过使用空白切片索引数组来完成的,即x[:]. 例子:

>>> x = [1,2,3]
>>> y = x[:]
>>> y.append(4)
>>> print x
[1, 2, 3]

在这里,对 进行了更改y,并且x没有修改。每当您想将 x 分配给 y 时,您都可以通过切片将这种技术应用于您的代码,反之亦然。

x = list(str(raw_input("Please enter a string: ")))

y = x[:]

#later, within the while loop:
    while j<n:
        x = y[:]
于 2013-09-16T12:58:57.437 回答