1

我无法理解列表:

mList = []
def func1(mList):
    mList.append("1")
    return
func1()
print mList

据我了解,因为列表是可变的,如果我在函数中编辑它,主列表也将被编辑。在我正在处理的一个程序中,我正在使用一个列表作为“保存文件”,但是,我用作“value_blacklist”的第二个列表在编辑/添加到后没有被保存。

如果有任何帮助,我将问题部分包含在我遇到的实际代码中。

def func04(feedback, test_list, value_blacklist, upper_limit=6):
    if value_blacklist == []:
            value_blacklist = blacklist_gen(length)
       import random
       new_list = []
        for index in list(range(0, len(feedback))):
        if feedback[index] == 0: #This value is correct, leave it
            new_list.append(test_list[index])
        elif feedback[index] == 2:
            value_blacklist = full_blacklist(test_list[index], value_blacklist)
            new_list.append(0)
        elif feedback[index] == 1:
            value_blacklist[index].append(test_list[index])
            new_list.append(0)
    for index in list(range(0, len(feedback))):
        if new_list[index] == 0:
            new_list[index] = pick_new(index, value_blacklist, upper_limit)
    return new_list

next_guess = lambda: func04(feedback(), save_game[-1], value_blacklist, save_game[0])

感谢您的帮助,我对此感到非常困惑。

4

2 回答 2

2

无论你在说什么

value_blacklist = ...

您正在重新绑定 value_blacklist到一个新的(列表)对象。如果你改为说

value_blacklist[:] = ...

您将替换列表的内容而不重新绑定它。

问很多问题,直到你真正理解这一点。“得到”它是非常重要的。

于 2013-11-14T01:30:03.137 回答
1

在函数中使用=运算符时,您不会修改现有对象。表达式的右侧创建一个新列表并返回对它的引用,并且该引用被分配给value_blacklist

value_blacklist = blacklist_gen(length)
...
value_blacklist = full_blacklist(test_list[index], value_blacklist)

这些是您创建新本地列表并使用value_blacklist. 这就是为什么value_blacklist不反映变化。您可以通过在赋值语句之后和函数开头打印idof来确认这一点。value_blacklist

于 2013-11-14T01:16:17.453 回答