python - 引用python中的列表容器理解for循环

标签 python list reference for-loop

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

x=[[1,2,3],[4,5,6]]
for v in x:
  v=[0,0,0]

这里如果你打印 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

然后你得到 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

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

最佳答案

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

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

v 之前是否引用其他内容并不重要。

如果你想改变当前被v引用的列表的内容,那么你不能使用v =语法。您必须像您提到的那样为其分配元素,或者使用 Sven 指出的切片符号 v[:] =

关于python - 引用python中的列表容器理解for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917244/

相关文章:

python - 在 python3 中重定向不需要的输出

python - 在Python中提取列表列表的特定元素

c++ - 全局列出对象并在 c/c++ 中添加类的本地对象

C++ STL 列表崩溃,数字超过 1 000 000 000

c++ - 以下 C++ 代码片段的作用是什么?

python - 如何在 Beautifulsoup 4 中检索包含特定文本的 href?

python - 在 PyQT 中如何打开一个可以访问父属性的子窗口?

python - 为什么 python 上的 pmdarima 包中的 auto_arima 函数比 R 上可用的 auto.arima 函数慢得多?

python - 通过字典键进行动态操作

C++ 局部变量语法