打印时不换行(print 'a',)会打印空格,如何去除?

125 投票
13 回答
225748 浏览
提问于 2025-04-16 08:50

我有这段代码:

>>> for i in xrange(20):
...     print 'a',
... 
a a a a a a a a a a a a a a a a a a a a

我想输出 'a',不带 ' ',像这样:

aaaaaaaaaaaaaaaaaaaa

这样做可以吗?

13 个回答

41

你可以通过在两个 print 语句之间打印一个空字符串来消除空格。

>>> import sys
>>> for i in range(20):
...   print 'a',
...   sys.stdout.write('')
... 
aaaaaaaaaaaaaaaaaaaa

不过,更好的方法是先把你想打印的整个字符串准备好,然后用一个 print 语句一次性输出它。

119

来自PEP 3105: 将print作为一个函数,这是在Python 2.6的新特性文档中的内容:

>>> from __future__ import print_function
>>> print('a', end='')

显然,这个功能只适用于Python 3.0及以上版本(或者在2.6及以上版本中,如果在开头加上from __future__ import print_function)。在Python 3.0中,print语句被移除了,默认变成了print()函数。

132

有很多方法可以实现你的目标。如果你只是想解决你当前的问题,可以使用字符串乘法,就像@Ant提到的那样。这种方法只适用于每个print语句打印相同的字符串。值得注意的是,这种方法适用于任何长度的字符串乘法(例如,'foo' * 20是可以的)。

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

如果你想更通用地处理这个问题,可以先构建一个字符串,然后一次性打印出来。这样会占用一些内存来存储这个字符串,但只需要调用一次print。需要注意的是,使用+=来连接字符串的效率是线性的,也就是说,连接的字符串越大,速度会越慢,但在一般情况下还是比较快的。

>>> for i in xrange(20):
...     s += 'a'
... 
>>> print s
aaaaaaaaaaaaaaaaaaaa

或者,你可以更直接地使用sys.stdoutwrite()方法,print其实是对这个方法的封装。这样做会直接写入你给定的原始字符串,而不会进行任何格式化。需要注意的是,即使在20个a的结尾,也不会打印换行符。

>>> import sys
>>> for i in xrange(20):
...     sys.stdout.write('a')
... 
aaaaaaaaaaaaaaaaaaaa>>> 

在Python 3中,print语句变成了一个print()函数,这个函数允许你设置一个end参数。你可以通过从__future__导入来在>=2.6的版本中使用这个功能。不过,我建议在任何严肃的2.x代码中避免使用这个,因为对于从未使用过3.x的人来说,这可能会有点困惑。不过,这应该能让你感受到3.x带来的一些好处。

>>> from __future__ import print_function
>>> for i in xrange(20):
...     print('a', end='')
... 
aaaaaaaaaaaaaaaaaaaa>>> 

撰写回答