在for循环中,我尝试覆盖字符串类型的变量。
item1 = "Item 1"
item2 = "Item 2"
for item in [item1, item2]:
if item == "Item 2":
item = "Item 1"
print (item1, item2)
结果显示"Item 1 Item 2"
。应该说"Item 1 Item 1"
我也试过item = item.replace("Item 2","Item 1")
。结果相同。
什么阻止"Item 2"
被替换?
更新
与Changing iteration variable inside for loop in Python类似,但是使用字符串,而不是整数。
我有一个更长的变量列表要验证和覆盖,所以只使用当前项进行重新分配的for循环是理想的(而不是item2 =“Item 1”)
答案 0 :(得分:4)
您正在重新分配在for循环的每次迭代中分配的临时变量item
。所以基本上,你将item
重新分配给"Item 1"
,然后解释器会在下一次迭代时立即重新分配给"Item 2"
。但是,在任何情况下,您都不会通过重新分配此变量来改变原始列表。
如果您真的希望最后一行打印出您想要的内容,那么您需要重新分配原始变量:
item1 = "Item 1"
item2 = "Item 2"
for item in [item1, item2]:
if item == "Item 2":
item2 = "Item 1"
print (item1, item2)
然而,制作一个更改列表更有意义。这是常见的模式:
old_list = ["Item 1", "Item 2"]
new_list = []
for item in old_list:
if item == "Item 2":
new_list.append("Item 1")
else:
new_list.append(item)
print new_list