1

リストを理解するのに問題があります:

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

リストはミュータブルなのでわかるのですが、関数で編集するとメインリストも編集されてしまいます。私が取り組んでいるプログラムでは、これは「保存ファイル」として使用している 1 つのリストで発生していますが、「value_blacklist」として使用している 2 番目のリストは、編集/追加後に保存されません。

問題が発生している実際のコードの問題部分を含めました。

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、変更が反映されません。これは、代入ステートメントidの後と関数の最初に of を出力することで確認できます。value_blacklist

于 2013-11-14T01:16:17.453 に答える