非常简单的解释。我们初始化一个列表:
q = [ 'sdf\n', 'sdfd\n' ]
现在,我们要使用文件对象上的\n
从剩余的每个元素中删除换行readlines()
。当我不循环使用splice
时,效果很好:
q[0]=q[0][:-1]
这给出:
q = [ 'sdf' , 'sdfd\n' ]
符合预期。
但是在简单循环中使用时,
for i in q:
if i[-1]=='\n':
i=i[:-1]
这根本不会更改列表!我想念什么?如何摆脱所有换行标记? Python似乎没有在循环中摆脱它们。
在python中,字符串是不可变的。当您执行i=i[:-1]
时,实际上是在创建一个具有新值的新字符串,但您没有直接修改可变的列表。如果您尝试实际修改列表,则会看到它起作用:
>>> for i,j in enumerate(q):
... if q[i][-1]=='\n':
... q[i]=q[i][:-1]
...
>>> q
['sdf', 'sdfd']
您也可以像这样使用列表理解来做同样的事情:
q[:] = [q[i][:-1] for i,j in enumerate(q) if q[i][-1]=='\n']
在上面的列表理解中,我们使用q[:] = ...
而不是q = ...
,以便我们就地修改q
条目。