为什么Python不在这个看似简单的代码中剪接换行符?

问题描述 投票:2回答:1

非常简单的解释。我们初始化一个列表:

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-3.x string list splice
1个回答
3
投票

在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条目。

© www.soinside.com 2019 - 2024. All rights reserved.