【问题标题】:Why wont my function add lists properly?为什么我的函数不能正确添加列表?
【发布时间】:2015-01-03 17:03:38
【问题描述】:

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

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]。任何想法为什么会发生这种情况?

编辑 这是我的功能:

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]

【问题讨论】:

  • 您能否修复缩进,使其与您的代码匹配? printdeck = … 行是 moveCard 函数的一部分吗?
  • 另外,除了用英语描述你做了什么来测试它,你能用代码来展示吗? “只求卡值”是什么意思?
  • @abarnert 我编辑了,可以吗??
  • 首先,不要在末尾添加 EDIT: 并使用相同信息的不同版本。只需编辑它。如果人们想查看旧版本,可以单击历史记录。其次,您必须将代码格式化为代码。选择它,然后单击{} 按钮。

标签: python list function merge add


【解决方案1】:

认为你的问题是这样的:

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

deck.pop(index)

这是在修改传入的实际列表,所以调用者会看到它。

然后,稍后:

deck = left + right

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


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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2022-01-02
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多