现在,我知道在迭代循环中修改列表是不安全的。 但是,假设我有一个字符串列表,并且我想自己剥离字符串。 替换可变值是否算作修改?
字符串不是可变值。
@ user470379:列表的元素是否可变与在循环时是否安全修改列表所处的位置无关。
由于下面的循环仅修改已经看到的元素,因此可以接受:
a = ['a',' b', 'c ', ' d ']
for i, s in enumerate(a):
a[i] = s.strip()
print(a) # -> ['a', 'b', 'c', 'd']
不同于:
a[:] = [s.strip() for s in a]
尽管它确实需要更多的索引操作,但它不需要创建临时列表和分配临时列表来替换原始列表。
警告:尽管可以用这种方式修改条目,但是您不能在list中更改项目数,而不会冒遇到问题的机会。
这是我的意思的示例-从该点开始删除条目会使索引混乱:
b = ['a', ' b', 'c ', ' d ']
for i, s in enumerate(b):
if s.strip() != b[i]: # leading or trailing whitespace?
del b[i]
print(b) # -> ['a', 'c '] # WRONG!
(结果是错误的