python - 在python中使用for循环为迭代器的元素分配新值的麻烦
问题描述
我在使用 for 循环为迭代器的元素分配新值时遇到问题。假设我们有这个列表:
some_2d_list = [['mean', 'really', 'is', 'jean'],
['world', 'my', 'rocks', 'python']]
for items in some_2d_list:
items = items.reverse()
但是这个没有(在这种情况下,我们将不得不使用索引来应用更改):
for items in some_2d_list:
items = ["some new list"]
some_2d_list = [["some new list"],
["some new list"]]
解决方案
list.reverse
就地反转并返回无,所以
for items in some_2d_list:
items = items.reverse()
反转仍然存在的现有列表some_2d_list
并分配None
给items
.
当你在代码块中输入时for items in some_2d_list
,items
仍然是对对象的引用some_2d_list
。任何修改现有列表的东西some_2d_list
也会影响。例如
>>> some_2d_list = [['mean', 'really', 'is', 'jean'],
... ['world', 'my', 'rocks', 'python']]
>>>
>>> for items in some_2d_list:
... items.append('foo')
... del items[1]
...
>>> some_2d_list
[['mean', 'is', 'jean', 'foo'], ['world', 'rocks', 'python', 'foo']]
像“+=”这样的增强操作是模棱两可的。根据任何给定类型的实现方式,它可以就地更新或创建新对象。他们为列表工作
>>> some_2d_list = [['mean', 'really', 'is', 'jean'],
... ['world', 'my', 'rocks', 'python']]
>>>
>>> for items in some_2d_list:
... items += ['bar']
...
>>> some_2d_list
[['mean', 'really', 'is', 'jean', 'bar'], ['world', 'my', 'rocks', 'python', 'bar']]
但不适用于元组
>>> some_2d_list = [('mean', 'really', 'is', 'jean'), ('world', 'my', 'rocks', 'python')]
>>> for items in some_2d_list:
... items += ('baz',)
...
>>> some_2d_list
[('mean', 'really', 'is', 'jean'), ('world', 'my', 'rocks', 'python')]
推荐阅读
- python-3.x - 将一个函数的多个返回值作为参数传递给另一个函数
- bash - 通过 Bitrise 运行时,Bash shell 脚本命令乱序执行
- java - 虽然使用相同的数据提供者在 2 个不同的类中有 2 个测试用例,但在执行第 2 个用例时,超类中的所有值都会重置为 null
- java - T4CConnection.doDescribeTable() 调用每个插入语句?
- c++ - 为什么这个 C++ LinkedList 语句无效?
- c# - 实体框架添加记录而不检查它是否存在或已添加
- python-import - 如何让包/模块在 Python 3.9.1 中工作(包间和包外)
- python - 由于特殊符号无法合并数据帧
- java - 编译致命错误:无效的目标版本:12 -> [帮助 1]
- typescript - NestJS/graphql 拦截 graphql 响应