0

だから私は関数を持っています:

def flip_stack(stack, nFlip):
    """flip_stack(list, num)
    Edits stack to flip the first nFlip elements in the stack."""
    newStack = stack[:nFlip]
    for element in newStack:
        stack.remove(element)
    newStack.reverse()
    stack = newStack + stack
    return(stack)

与えられた

stack = [2, 3, 1, 4, 0]
nFlip = 3
stack = [1, 3, 2, 4, 0]

これで大部分は機能します。正しい場所でスタックを反転します。

ただし、後でそれを使用する場合:

difStack = stack
flip_pancakes(difStack, difStack.index(max(difStack)) + 1) # flip stack so largest number is at front
print(stack)

スタックが突然 [0] になる理由は誰にも分かりますか? コードの 2 番目のビットの flip_pancakes() 関数は、difStack だけを変更する必要があります。

そして、その特定のビットが本当に厄介であることを認識しています。それを改善する方法はありますか?

ありがとう!

4

3 に答える 3

1

diffstackリストは新しいリストではありません

これを変える:

difStack = stack

これに:

 difStack = stack[:]
于 2013-08-05T04:27:49.027 に答える
0

difStack = stackクローンしませんstack。これらの変数は両方とも、同じリスト オブジェクトを指しています。

リストを複製したい場合は、それをスライスします:

difStack = stack[:]

またはそれをlist()ビルトインに渡します:

difStack = list(stack)
于 2013-08-05T04:27:33.810 に答える