我循环遍历元组列表,每次迭代,我都会在当前循环变量中附加一些额外的元素,然后用新列表执行操作。
诱惑是修改循环变量以包含额外的元素,然后用它做一些事情。
请考虑以下代码段:
required_part = (0, 4)
optional_part = [(1, 2), (1, 3), (2,3)]
for x in optional_part:
x += required_part
x = sorted(x)
print(x)
但是在循环中改变循环变量的一些事情让我感到不安。
是否有任何情况下,变更循环变量会产生意外结果或者我可以不再担心?
注意:似乎有很多discussion关于改变迭代的内容。这个问题更像是改变循环变量
答案 0 :(得分:4)
只要您不改变收藏本身,就没关系。问题只有在您尝试从集合中添加/删除时才会出现,您将重复进行迭代。
# Say something like this
for x in optional_part:
optional_part.remove(x)
答案 1 :(得分:3)
虽然在评论和其他答案中已经说过大多数,但值得注意的是+=
运算符并不总是执行重新分配。它只是tuple
实现它的方式(它必须具有不变性)。元组和列表以不同的方式实现它:
列出执行 mutate:
a = x = [5, 6]
a += [7]
a
# [5, 6, 7]
x
# [5, 6, 7]
Tuples不要:
a = x = (5, 6)
a += (7,)
a
# (5, 6, 7)
x
# (5, 6)
答案 2 :(得分:2)
问题是,循环变量绑定到什么?如果该值是可变的,则可以更改列表的内容,但不能更改列表本身。
>>> lst = [[1, 2], [3, 4]]
>>> for x in lst:
... x += [5]
...
>>> print lst
[[1, 2, 5], [3, 4, 5]]
lst
仍然是两个元素的相同列表,这两个元素都已更改。
如果元素不可变,则没有任何变化。
>>> lst = [1,2,3]
>>> for x in lst:
... x += 5
...
>>> print lst
[1, 2, 3]