検索

ホームページ  >  に質問  >  本文

Python で for ループを使用して入れ子になったリストに値を割り当てると、値は常に i の最終値に基づいて計算されるのはなぜですか?

例は 2 つあり、最初の例は次のとおりです。

リーリー

このとき、a=[3,4,5,6,7]
2つ目は以下の通りです。 リーリー

このとき、a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]

なぜこのようなことが起こるのでしょうか? 私の 2 番目の書き方に何か問題があるのでしょうか?

初心者の方、アドバイスをお願いします!

扔个三星炸死你扔个三星炸死你2763日前985

全員に返信(3)返信します

  • 大家讲道理

    大家讲道理2017-06-12 09:27:09

    ここで 2 つの問題が発生しました:
    1 つ目は、上で述べたように、a[0] の値を変更していますが、変更された i放入列表去处理, 或者说, 你漏了把i を質問内のコードに書き込んでいません:
    正しい方法:

    リーリー

    2 番目の質問は、上記で質問したものですが、a=[[0,0]]*5 の定義メソッドがすべて a=[[ 7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]a=[[0,0]]*5这种定义方法, 结果出来发现全部都是a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]
    这个问题和第一个问题有个相同之处, 就是你应该是忘了写a[i][0] = i + 3,
    其次就是: 如果用[[0, 0]] * 5この質問には最初の質問と共通点が 1 つあります。 a[i][0] = i + 3 を書き忘れました。

    2 番目のステップは、[[0, 0]] * 5 リストを使用して生成された場合です。 、その中のすべては参照であり、5 つのオブジェクトではなく、すべて同じオブジェクトです。例を参照してください:

    リーリー id值看到, 他们都是一样的地址, 所以列表中的5个对象, 全是同一个, 所以当你执行a[i][0]= i+3合格
    できる場合、どれだけ多くの要素を変更しても、最終的には同じリストを変更するだけです!

    そのため、必要な効果を試したい場合は、そのメソッドを使用してリストをすばやく生成することはできません。次のメソッドのみを使用できます:🎜 リーリー

    返事
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:27:09

    i変数を使って反復する必要があるため、常に0を変更すると、当然a[0]が上書きされ、それが最後の値になります
    最初のコードでは、a=[3,4を取得できません,5, 6,7]、i 変数を使用する必要があります

    リーリー

    2番目のコード:

    リーリー

    コードを間違って書いたようです。おそらくこの質問をしたいのでしょう

    リーリー

    プリントアウトできます

    リーリー

    @Lin_R が正しいです

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:27:09

    実際、2 番目の方法は個別ではなく共有されます。これは、この時点ではリストであり変数であるのに対し、最初のメソッドは数値であり不変であるためです。

    返事
    0
  • キャンセル返事