Pythonの多次元リストの乗算(連結)でこれが間違っているのはなぜですか?

jizhekf

非常に長いコードを使用せずに、Pythonの多次元の空のリストを作成したいと思います。だから私はこれを試しました:

a = [[[]] * 2] * 2  

print(a)を実行すると、多次元の空のリストが表示されます。

[[[], []], [[], []]]

しかし、空のリストの1つに何かを追加すると、次のようになります。

a[0][0].append(np.array((1.5,2.5)))  

すべての空のリストはこのnp.arrayを取得しました:

[[[array([1.5, 2.5])], [array([1.5, 2.5])]], [[array([1.5, 2.5])], [array([1.5, 2.5])]]]  

しかし、以下のように多次元の空のリストを作成すると、次のようになります。

b = []  
for i in range(2):   
    c = []  
    for j in range(2):  
        c.append(([]))  
    b.append(c)  

できます。印刷(b)しても、次のようになります。

[[[], []], [[], []]]  

しかし、私がするとき

b[0][0].append(np.array((1.6,2.6))) 

次にprint(b)、私は得ました:

[[[array([1.6, 2.6])], []], [[], []]]  

それが私が欲しいものです。

なぜ起こるのですか?

Python3.6.8を使用しています

これは私のコードです:

これは間違っています:

a = [[[]] * 2] * 2  
print(a)  
a[0][0].append(np.array((1.5,2.5)))  
print(a)  

これは私が欲しいものです:

b = []  
for i in range(2):  
    c = []  
    for j in range(2):  
        c.append(([]))  
    b.append(c)  
print(b)  
b[0][0].append(np.array((1.6,2.6)))  
print(b)  

なぜ機能しa = [[[]] * 2] * 2ないのですか、そしてどうすればこれをすぐに作成できますか?ありがとう!

ヤン・ヴェルニエ

あることがうまくいくと別のことがうまくいかないということではなく、異なる結果を期待しているということです。それぞれ[]がリストを作成しますが、そのリストは変更可能です。リストの乗算では、新しい要素は作成されませんが、それらへの新しい参照が作成さ[[]]*2れるため、同じ内部リストへの2つの参照が含まれています。多次元リストの概念はありません。他のリストを保持するリストにすぎません。forループ、あなたは走った[]別個のリストを作成し、複数回。

基本的には、の[[]]*2よう[[], []]見えますが、実際にはb後のようですa = []; b = [a, a][[], []]はのようa1 = []; a2 = []; b = [a1, a2]です。

リスト作成構造をよりコンパクトに記述する1つの方法は、リスト内包表記を使用することです。

listoflists = [[[] for i in range(2)] for j in range(2)]

別のオプションは、NumPyのndarrayなど、複数の次元をサポートする構造を使用することです。

>>> import numpy
>>> a = numpy.ndarray((2,2), numpy.object)
>>> a
array([[None, None],
       [None, None]], dtype=object)

ただし、これは行列用に構築されているため、独立した長さのリストはありません。

このため、標準ライブラリの一部では、プロトタイプオブジェクトの代わりにファクトリ関数の使用がサポートされていcollections.defaultdict(list)ます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

この計算で間違った結果が生成されるのはなぜですか?

分類Dev

このクエリが間違っているのはなぜですか?

分類Dev

このステートメントが間違っているのはなぜですか?

分類Dev

このmysqlトリガー構文が間違っているのはなぜですか?

分類Dev

この単純な例で私の背景が間違って配置されているのはなぜですか

分類Dev

SortBy Valuesの結果が間違っているのはなぜですか?

分類Dev

この単一の出力が間違っているのはなぜですか?

分類Dev

この単一の出力が間違っているのはなぜですか?

分類Dev

なぜ減算結果が間違っているのですか?アセンブリx86

分類Dev

このコードが間違った計算をしているのはなぜですか?

分類Dev

リダイレクトが間違っているのはなぜですか?

分類Dev

なぜこれは次のコードの出力がGO言語で間違っているのですか?

分類Dev

この関数が対数時間計算量(数値のn乗根を計算する)を持っているのはなぜですか?

分類Dev

この階乗関数が間違った結果を返すのはなぜですか?

分類Dev

BitBucketでホストされているすべてのリポジトリがAtlassianSourceTreeで乗算されるのはなぜですか?

分類Dev

Javascriptなぜこれが間違っているのですか?10> 9> 8 === true;

分類Dev

なぜこのPythonスクリプトは、ifブロックでawkとcomapring値を使用して、間違った出力を提供しているのですか?

分類Dev

長方形が間違って描かれているのはなぜですか?

分類Dev

長方形が間違って描かれているのはなぜですか?

分類Dev

Prologで予期しない回答が得られるのはなぜですか。リスト、乗算、再帰

分類Dev

次のPythonコードが間違っているのはなぜですか?

分類Dev

「zzz」-le「~~~」が間違っているのはなぜですか?

分類Dev

["text"] == ["text"]が間違っているのはなぜですか?

分類Dev

x <= xが間違っているのはなぜですか?

分類Dev

XOR出力が間違っているのはなぜですか

分類Dev

b [2]が間違っているのはなぜですか?

分類Dev

各桁の4乗の合計を計算すると、なぜ間違った結果が得られるのですか?

分類Dev

関数によって返されるリストの結果がおかしいのはなぜですか?

分類Dev

このインデントが間違っているのはなぜですか?

Related 関連記事

  1. 1

    この計算で間違った結果が生成されるのはなぜですか?

  2. 2

    このクエリが間違っているのはなぜですか?

  3. 3

    このステートメントが間違っているのはなぜですか?

  4. 4

    このmysqlトリガー構文が間違っているのはなぜですか?

  5. 5

    この単純な例で私の背景が間違って配置されているのはなぜですか

  6. 6

    SortBy Valuesの結果が間違っているのはなぜですか?

  7. 7

    この単一の出力が間違っているのはなぜですか?

  8. 8

    この単一の出力が間違っているのはなぜですか?

  9. 9

    なぜ減算結果が間違っているのですか?アセンブリx86

  10. 10

    このコードが間違った計算をしているのはなぜですか?

  11. 11

    リダイレクトが間違っているのはなぜですか?

  12. 12

    なぜこれは次のコードの出力がGO言語で間違っているのですか?

  13. 13

    この関数が対数時間計算量(数値のn乗根を計算する)を持っているのはなぜですか?

  14. 14

    この階乗関数が間違った結果を返すのはなぜですか?

  15. 15

    BitBucketでホストされているすべてのリポジトリがAtlassianSourceTreeで乗算されるのはなぜですか?

  16. 16

    Javascriptなぜこれが間違っているのですか?10> 9> 8 === true;

  17. 17

    なぜこのPythonスクリプトは、ifブロックでawkとcomapring値を使用して、間違った出力を提供しているのですか?

  18. 18

    長方形が間違って描かれているのはなぜですか?

  19. 19

    長方形が間違って描かれているのはなぜですか?

  20. 20

    Prologで予期しない回答が得られるのはなぜですか。リスト、乗算、再帰

  21. 21

    次のPythonコードが間違っているのはなぜですか?

  22. 22

    「zzz」-le「~~~」が間違っているのはなぜですか?

  23. 23

    ["text"] == ["text"]が間違っているのはなぜですか?

  24. 24

    x <= xが間違っているのはなぜですか?

  25. 25

    XOR出力が間違っているのはなぜですか

  26. 26

    b [2]が間違っているのはなぜですか?

  27. 27

    各桁の4乗の合計を計算すると、なぜ間違った結果が得られるのですか?

  28. 28

    関数によって返されるリストの結果がおかしいのはなぜですか?

  29. 29

    このインデントが間違っているのはなぜですか?

ホットタグ

アーカイブ