python - Python如何迭代一个for循环?

标签 python loops for-loop

我在 Python 上尝试了以下代码,这就是我得到的: 似乎对于我尝试通过更改 elem 对 iterables 进行的许多更改,它不起作用。

lis = [1,2,3,4,5]
for elem in lis:
    elem = 3

print lis
[1, 2, 3, 4, 5]

但是,如果可迭代对象是具有自己方法的对象(如列表),则可以在 for 循环中修改它们。

lis = [[1],[2]]
for elem in lis:
    elem.append(8)

print lis
    [[1, 8], [2, 8]]

for 循环中,'elem' 术语到底是什么?提前致谢!

最佳答案

这不起作用的原因是因为您误解了 elem 是什么。它不是对象本身,甚至称它为“变量”也不正确。

它是一个名称,有点像标签,指向对象。如果你只是直接赋值给它,你只是覆盖这个名字以指向别的东西。但是,您仍然拥有对列表的原始引用,因此为 elem 分配不同的值不会修改 lis 本身。

现在,在这种情况下,由于 elem 指向的所有对象都是整数,您甚至根本无法更改它们 - 因为整数(以及许多其他类型,如字符串或元组)是不可变的。这意味着,简单地说,一旦创建了对象,就不能对其进行修改。这与它们是否“有方法”无关(所有 Python 对象都有方法,包括整数),而是它们是否不可变。

然而,有些对象是可变的,这意味着它们可以被改变。列表是此类对象的示例。在您的第二个示例中,elem 是一个引用 lis 中包含的 list 对象的名称,这些对象本身是可变的。这就是为什么就地修改它们(使用 .append().remove() 等)工作正常的原因。

关于python - Python如何迭代一个for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785490/

相关文章:

python - PyTorch 中的嵌入会创建范数大于 max_norm 的嵌入

loops - 在 Lisp 中附加到 "loop-collect"的结果

c - 为什么 while 循环对于这个链接列表程序不起作用?

c - 我的 for 循环是否有问题导致它在屏幕上显示不正确的星号?

Javascript 将过滤器应用于对象列表并隐藏相应的部分分隔符(部分分隔符和列表元素是分开的)

python - 按值对字典列表进行排序

python - Pytorch 期望每个张量大小相等

python - 将内容传递给 Python 中另一个模块的函数

javascript - 在 forEach 循环中等待 promise

java - 如何在Java中使用两个条件(大于和小于)来终止for循环?