5 回答
TA贡献1796条经验 获得超4个赞
当您编写 时x = '0' + x,您只需覆盖名称x指向的值。每次执行新的循环时,您都不会直接修改列表中x最初指向的值。for x in remove_zeros:
您可以通过直接使用其索引访问它并为其分配一个新值来修改列表中的值。一个简单的方法是使用enumerate,它同时循环列表索引和值:
for index, x in enumerate(remove_zeros):
if x == remove_zeros[-1]:
remove_zeros[index] = '0' + x
else:
remove_zeros[index] = '1' + x
TA贡献1848条经验 获得超10个赞
在 for 循环中,控制变量 (x) 是在每次迭代时重新分配的临时变量。对于字符串,它不是对列表元素的引用,而是单独的副本。这意味着在循环内更改 x 不会对列表产生影响。
鉴于您正在修改列表中的每个元素,您可以在不求助于索引的情况下执行此操作(这不是非常 Pythonic)。尝试使用列表推导生成一个新列表:
remove_zeros = [ '10'[x==remove_zeros[-1]]+x for x in remove_zeros ]
TA贡献1828条经验 获得超3个赞
使用索引号而不是临时变量x
来修改列表的值:
for i in range(len(remove_zeros)): remove_zeros[i] = ('0' if remove_zeros[i] == remove_zeros[-1] else '1') + remove_zeros[i]
TA贡献1868条经验 获得超4个赞
for循环控制变量不是对列表元素的引用,它是一个元素的副本。更改它不会更改列表的元素。您可以将结果存储在另一个列表中:
result = []
for x in remove_zeros:
if x == remove_zeros[-1]:
result.append('0' + x)
else:
result.append('1' + x)
或者按照@jfaccioni 的建议去做。顺便说一句,无论哪种方式,您都不是在检查 x 是否是列表的最后一个元素,而是 x是否等于最后一个元素。考虑一个列表: ['3','0','1','2','3']……您将在列表0中添加两个3s。
TA贡献1815条经验 获得超10个赞
这是因为您正在处理循环变量 x 而不是要更改的实际元素。remove_zeros 中的元素保持不变。将您的代码更改为:
for i in range(len(remove_zeros)): remove_zeros[i] = '0' + remove_zeros[i] if remove_zeros[i] == remove_zeros[-1] else '1' + remove_zeros[i]
添加回答
举报