lst = [(8, 7), (9, 6), (4, 8), (3, 5), (9, 4)]
for i in range(len(lst)):
lst[i] = list(lst[i])
这很好用.
for i in lst:
i = list(i)
但这不起作用.我不知道为什么?谁能告诉我原因吗?
lst = [(8, 7), (9, 6), (4, 8), (3, 5), (9, 4)]
for i in range(len(lst)):
lst[i] = list(lst[i])
这很好用.
for i in lst:
i = list(i)
但这不起作用.我不知道为什么?谁能告诉我原因吗?
Mutable Sequence Types
(例如list
)的文档解释了在序列s
内将对象x
分配给索引i
处的项目,如下所示:
Operation:
s[i] = x
Result:
s
中的第i
项替换为x
这意味着代码读取lst[i] = list(lst[i])
中的行将用list(lst[i]))
替换lst
中的项目i
,list(lst[i]))
是新创建的list
,包含lst[i]
引用的tuple
的元素.
相反,请考虑您的代码阅读:
for i in lst:
i = list(i)
for
语句将lst
的索引0处的项分配给变量i
并执行语句i = list(i)
,然后在其下一次迭代中将lst
的索引1处的项分配给i
并再次执行语句i = list(i)
,依此类推,直到lst
用完.
请注意:
for循环对变量i
的赋值使i
成为对lst
中项目的引用
由于lst
中的每个项最初都是tuple
,并且tuple
是immutable sequence type
,因此无法更改i
引用的对象,因此无法使用i
更改lst
lst
是列表列表(而不是元组列表),那么我们would可以使用i
修改lst
的项,例如:lst = [[8, 7], [9, 6], [4, 8], [3, 5], [9, 4]]
for i in lst:
i[:] = i + [0]
i.append(1)
print(lst)
# Output:
[[8, 7, 0, 1], [9, 6, 0, 1], [4, 8, 0, 1], [3, 5, 0, 1], [9, 4, 0, 1]]
list(i)
从元组i
创建list
类型的新对象
i = list(i)
将该新对象分配给变量i
,使得i
现在是对新创建的list
对象的引用;i
之前引用的对象,即lst
中的tuple
项,作为lst
中的一项保持不变.