1

私はPythonを使用しており、次のように構成されたセットのリストがあります。

list = [set([])]*n

...ここで、nはリストに必要なセットの数です。リスト内の特定のセットに値を追加したい。言う、2番目のセット。私は試した

list[1].add(value)

ただし、これにより、リスト内のセットに値が追加されます。この振る舞いは私にはかなり直感的ではありません。さらなるテストを通して、私は問題を発見したと思います。リストには、同じセットの10個のインスタンス、または同じセットへの10個のポインターなどが含まれているようです。の繰り返し呼び出しによるリストの作成

list.append(set([]))

上記の構文を使用して、単一のセットに要素を追加することができました。だから私の質問はこれです:私の最初のリスト構築技術で正確に何が起こっているのですか?構文がよくわからないのは明らかです。また、n要素リストを初期化するためのより良い方法はありますか?私はこの構文をしばらく使用してきましたが、これが私の最初の問題です。

4

2 に答える 2

5

問題を自分でほぼ要約しました。X*n構文はXの1つのインスタンスを作成し、それをn回含みます。'a'*10その文字列内のすべての文字がたまたま同じ「a」を指しているかどうかは問題ではないため、このような場合は問題ありませんが、リストやセットなどの可変構造の場合は問題になります。リスト内包表記を使用して、n個の個別のセットを作成できます。

list = [set() for x in xrange(n)]
于 2010-04-28T02:15:29.547 に答える
1

はい、その通りです。*構文は、参照を何度もコピーするだけです。メソッドは正常に機能します。または、リスト内包表記を使用して、次のようにその数のセットを作成できます。

list = [set([])for x in xrange(n)];
于 2010-04-28T02:16:50.607 に答える