为什么我的功能不能正确添加列表?

时间:2014-11-07 00:48:36

标签: python list function merge add

这是我为程序编写的函数,它应该将值移动到列表中。

def moveCard(deck):

    index = deck.index(27) 
    deck.pop(index) 
    left = deck[:index+1] 
    right = deck[index+1:] 
    left.append(27) 

    print (left + right)

    deck = left + right

然而它没有正确添加两个列表,除非我在它自己的功能中打印它。

使用文本列表卡运行功能= [24,27,2,5,8,11]打印出正确的列表,为[24,2,27,5,8,11]。但是,如果我在运行我获得的方法之后简单地询问卡的价值  [24,2,5,8,11]。任何想法为什么会这样?

EDIT 这是我的功能:

def move_joker_1(套牌):

    index = deck.index(JOKER1) 
    deck.pop(index) 
    left = deck[:index+1] 
    right = deck[index+1:] 
    left.append(JOKER1) 

    deck = left + right
    print(left + right)
    print(dec

这是我输入shel / results的内容:

卡= [24,27,2,5,8,11]

move_joker_1(卡)

[24,2,27,5,8,11]

[24,2,27,5,8,11]

打印(卡)

[24,2,5,8,11]

2 个答案:

答案 0 :(得分:1)

认为你的问题是这样的:

moveCard函数中,您有一个名为deck的参数。首先你这样做:

deck.pop(index)

这正在修改传入的实际列表,因此调用者将会看到它。

然后,后来:

deck = left + right

那不是修改任何东西;它正在创建一个新列表left + right,并将局部变量deck更改为该新列表的名称,而不是旧列表的名称。


你可能想要做的是返回新列表,这样调用者就可以将它存储在他想要的任何地方。但在这种情况下,您不希望使用pop变异原始列表。

或者,您可以两次就地修改列表,例如,通过撰写deck[:] = left + right

答案 1 :(得分:0)

从您的编辑:您没有修改cards列表。您应该在函数中添加return语句,然后按如下方式调用函数:cards = move_joker_1(cards)