参考python中的列表容器来理解循环

Jos*_*ose 5 python for-loop reference list

我的问题是关于以下for循环:

x=[[1,2,3],[4,5,6]]
for v in x:
  v=[0,0,0]
Run Code Online (Sandbox Code Playgroud)

这里如果你打印x你得到[[1,2,3],[4,5,6]] ..所以改变的v实际上并不是对x中列表的引用.但是,当您执行以下操作时:

x=[[1,2,3],[4,5,6]]
for v in x:
  v[0]=0; v[1]=0; v[2] =0
Run Code Online (Sandbox Code Playgroud)

然后你得x为[[0,0,0],[0,0,0]].如果x中的列表很长,甚至做这样的事情,这种方法很难:

x=[[1,2,3],[4,5,6]]
for v in x:
  for i in v:
    i = 0
Run Code Online (Sandbox Code Playgroud)

会给我x [[1,2,3],[4,5,6]].我最好的选择是在xrange(0,3)中使用i:v [i] = 0 ..虽然我仍然想知道这里发生了什么以及当我有列表或更多列表时其他选择是什么嵌套列表.

rec*_*ive 7

当python执行时v = [0, 0, 0],它就是

  1. 在其中创建一个包含三个零的新列表对象.
  2. 将对新列表的引用分配给名为的标签 v

如果之前v是对其他事物的引用并不重要.

如果要更改当前引用的列表的内容v,则无法使用该v =语法.您必须像上面提到的那样为其分配元素,或者使用v[:] =Sven所指出的切片表示法.

  • 这是一个比Sven更好的答案,因为它试图解释一些正在发生的事情,而不仅仅是盲目地遵循一个配方.(至少,这就是我现在在Sven看到的所有内容;也许他会编辑它.) (2认同)

Sve*_*ach 6

x = [[1,2,3],[4,5,6]]
for v in x:
    v[:] = [0,0,0]
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.