删除字符串中的行 python

Delete line in string python

从 python 中的字符串中删除一行的最有效方法是什么?我试过了

content = "first line \nsecond line\nthird line\netc.".splitlines()

i = 0
for line in iter(content):
  if len(line) < 5:
    content[i] = "" 
  i += 1

content = '\n'.join(content)

这里我的删除条件就是一行长度小于5个字符。还有更多的elegant/efficient方法吗?

这是一个使用列表理解的更简洁的方法:

'\n'.join([i if len(i) > 5 else '' for i in content.split('\n')])
#'first line \nsecond line\nthird line\n'

现在使用您的方法...请注意,content 已经是一个迭代器,因此不需要 iter(content)

还有什么可以改进的? python 有一个内置函数 enumerate,而不是使用计数器。使用它,您的代码可能如下所示:

content = "first line \nsecond line\nthird line\netc."
content = content.splitlines()

for i, line in enumerate(content):
      if len(line) < 5:
            content[i] = "" 

separator = '\n'
content = separator.join(content)

yatu 的回答很好,很 pythonic,但我们可以更进一步!

content = "first line \nsecond line\nthird line\netc."

content = '\n'.join(
    i if len(i) > 5 else ''
        for i in content.splitlines()
)

content
#'first line \nsecond line\nthird line'

str.join 接受任何可迭代对象,所以这里使用生成器表达式以获得更多 pythonic!

另一个选项是 Python 正则表达式:

import re
content = "first line \nsecond line\nthird line\netc."
print(re.sub(r'^.{1,5}$', '', content, flags=re.MULTILINE))

结果:

'first line \nsecond line\nthird line\n'