python - 如何用迭代器修改可迭代对象的元素? IE。如何在 Python 中获取写迭代器?

标签 python iterator sequence immutability

我非常喜欢 Python 语法,但由于我来自 C++,所以我对 Python 中的迭代器一无所知。在 C++ 中有 2 种迭代器 - 常量和修改(非常量)。在 python 中(就我所见而言)似乎只有第一种,如果你想修改元素,你必须使用索引,这让我感觉不舒服而且很通用。 让我用一个简单的例子来说明:

ab = ["a", "b"]
for (index, lett) in enumerate(ab):
    print "Firstly, lett is ab[index]?", lett is ab[index]
    lett = str(index)
    print lett
    print ab[index]
    print "But after, lett is ab[index]?", lett is ab[index]

所以我无法使用迭代器修改列表。 正如我用 is 运算符发现的那样,它只是制作延迟副本(请参阅 Wikipedia ),所以有没有办法说我希望它成为直接修改迭代器而不是使用整洁的

for variable in iterable_object:

语法?

最佳答案

语法

for x in iterable

不创建任何惰性副本——它将列表中的确切对象一个接一个地分配给 x。如果这些对象是可变的,您可以修改它们:

a = [[1, 2], [3, 4]]
for x in a:
    x.append(5)
print a

打印

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

您的示例使用字符串列表。字符串在 Python 中是不可变的,因此您无法修改它们。

关于python - 如何用迭代器修改可迭代对象的元素? IE。如何在 Python 中获取写迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432898/

相关文章:

python - 使用 PySide 覆盖 paintEvent 的问题

python - 检查非 root 用户是否可以访问路径

scala - 如何在不使用可变变量的情况下在 Scala 中编写迭代器?

python - 最长的连续字母序列

python - 列出带有 zip 的 ngram

mysql - 如何从 mysql 表创建期间日期范围,将列中的每个公共(public)值序列分组

Python:为什么我不能将元组解包到字典中?

python - 如何在 Python Bottle 中抛出自定义 404 消息

java - 链接列表中的数据不会显示在 GUI 的文本区域中。 java 。为什么?

c++ - 迭代时删除多映射中的元素