3

私は C からクロスオーバーした Python 初心者です。基本的に、C で配列ポインターの配列に相当するロジックを実装しようとしています。

これらのリストのリストを反復処理して、一連のリストの末尾に 1 つの項目を追加したいと考えています。次のコードがあります。

data = [10, 20, 30]
list1 = list2 = list3 = list()
lists = [list1, list2, list3]

for i in range(len(data)):
    lists[i].append(data[i])

for lst in lists:
    print lst

ただし、結果は次のとおりです。

[10, 20, 30]
[10, 20, 30]
[10, 20, 30]

それ以外の:

[10]
[20]
[30]

このコードが目的の出力を生成できない理由を説明できません。これを行う他の方法はありますか?

4

1 に答える 1

3

リストを 1 つだけ作成します

list1 = list2 = list3 = list()

この行は空のリストを作成し、その参照をにlist3割り当て、参照をおよび に割り当てます。その結果、これらは同じオブジェクトを参照します。したがって、値を追加すると、すべての「リスト」に追加されます。list3list2list1

これはうまくいきます

data = [10, 20, 30]
lists = [[], [], []]

for i in range(len(data)):
    lists[i].append(data[i])

for lst in lists:
    print lst

しかし、最も簡単な方法は、

data = [10, 20, 30]
lists = [ [x] for x in data ]
于 2013-09-21T06:45:42.413 に答える