在Python 3中向字符串添加字符

6

我目前有一个字符串,想通过在每个字符之间添加空格来编辑它,所以我目前有s = 'abcdefg',我希望它变成s = 'a b c d e f g'。是否有一种简单的方法可以使用循环来实现这一点?

3个回答

16
>>> ' '.join('abcdefg')
'a b c d e f g'

2
@Jakob Bowyer:为什么?据我上次检查,使用空格是编码风格的用户选择。 - poke
3
@Jakob Bowyer:PEP8并非强制性规则,而是一份指导方针。如果开发者想为他们的项目使用不同的风格(尤其是当Python不是他们所有工作的全部时),那么完全可以。此时更好的选择应该是忽略PEP8而不是盲目地执行它。 - poke
但是圆括号内的空格是一件特别奇怪的事情。我从未见过在任何地方使用它,你很难引用任何优点。当你没有充分的理由去做其他事情时,请跟随主流——为了大多数程序员的利益。 - user395760
@Jakob Bowyer: PEP 1PEP类型:“信息性PEP不一定代表Python社区的共识或建议,因此用户和实现者可以自由地忽略信息性PEP或遵循它们的建议。” - martineau
2
@Jakob:如果你建议进行样式清理,而不是直接告诉别人该怎么做,那么你会得到更好的反应。我认为这不是@Lennart应该在他人答案中进行的更改。 - Glenn Maynard
显示剩余3条评论

4

你提到了“使用循环”。

在Python中,字符串是可迭代的,这意味着你可以对它进行循环。

使用循环:

>>> s = 'abcdefg'
>>> s2=''
>>> for c in s:
...    s2+=c+' '
>>> s2
'a b c d e f g '    #note the trailing space there...

使用推导式,可以生成一个列表:

>>> [e+' ' for e in s]
['a ', 'b ', 'c ', 'd ', 'e ', 'f ', 'g ']  #note the undesired trailing space...

您可以使用map
>>> import operator
>>> map(operator.concat,s,' '*len(s))
['a ', 'b ', 'c ', 'd ', 'e ', 'f ', 'g ']

那么你会得到令人讨厌的列表,而不是一个字符串和一个尾部空格...

你可以使用正则表达式:

>>> import re
>>> re.sub(r'(.)',r'\1 ',s)
'a b c d e f g '

你甚至可以使用正则表达式来修复尾随空格:

您可以使用正则表达式来修复尾随空格:

>>> re.sub(r'(.(?!$))',r'\1 ',s)
'a b c d e f g'

如果您有一个列表,使用 join 来生成一个字符串:
>>> ''.join([e+' ' for e in s])
'a b c d e f g '

你可以使用 string.rstrip() 字符串方法来删除不需要的尾随空格:
>>> ''.join([e+' ' for e in s]).rstrip()
'a b c d e f g'

你可以将内容写入内存缓冲区并获得一个字符串:
你甚至可以将内容写入内存缓冲区,并获取一个字符串:
>>> from cStringIO import StringIO
>>> fp=StringIO()
>>> for c in s:
...    st=c+' '
...    fp.write(st)
... 
>>> fp.getvalue().rstrip()
'a b c d e f g'

但是由于join适用于列表或可迭代对象,因此您可以直接在字符串上使用join:

>>> ' '.join('abcdefg')
'a b c d e f g'   # no trailing space, simple!
在Python中,使用join的方式是最重要的编程习惯之一。 请使用它。
同时还需要考虑性能问题。可以阅读这篇比较文章,了解Python中不同字符串拼接方法的性能差异。

0
使用 f-string,
s = 'abcdefg'
temp = ""

for i in s:
    temp += f'{i} '
    
s = temp   
print(s)

a b c d e f g

[Program finished]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接