不使用换行符打印(打印'a',)打印空间,如何删除?

问题描述:

我有这样的代码:不使用换行符打印(打印'a',)打印空间,如何删除?

>>> 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 

这可能吗?

+3

我很惊讶,没有一个人没有提到' “”。加入( “A” 为我的xrange(20))'。 (它比仅仅做一个“* 20”更灵活,因为我认为这是一个简单的例子)。 – 2010-12-21 12:59:30

有许多的实现你的结果的方式。如果您只是想为您的案例寻求解决方案,请使用string multiplication作为@Ant提及。如果您的每个print语句都打印相同的字符串,这只会起作用。请注意,它适用于任何长度字符串的乘法运算(例如'foo' * 20作品)。

如果你想这样做一般,建立一个字符串,然后打印一次。这会消耗一些字符串的内存,但只能拨打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() function,它允许你设置一个end参数。您可以通过从__future__导入,在> = 2.6中使用它。尽管如此,我会避免使用任何严重的2.x代码,因为对于那些从未使用过3.x的人来说,这会有点令人困惑。但是,它应该让你领略3.x带来的一些善良。

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

@A A当字符串乘法答案出现时,我阅读了这个问题,并且认为我会给出几个选项的概述。其他人来时,我正在把我的答案放在一起。它很快就被接受了,否则我可能会删除它。 – marcog 2010-12-21 12:59:08

+9

-1不要通过串联建立字符串;它是O(n^2)而不是O(n)。改用'“”.join(...)'。 – katrielalex 2010-12-21 13:02:16

+10

我对你的答案没有任何问题,它总结了一切,这很好。但通过这样做,你会阻止其他回答的人。有很多很好的答案,都值得+1。试想一下,如果每个人都开始做总结。 – user225312 2010-12-21 13:03:41

没有什么?你的意思是

无论什么Antsays,或积累成一个字符串,然后打印一次:

s = ''; 
for i in xrange(20): 
    s += 'a' 
print s 
+0

好的小东西。 – 2016-09-21 22:19:42

您可以通过打印一个空字符串print语句之间到stdout抑制的空间。

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

然而,一个更清洁的解决方案是先构建你想打印,然后用单print语句输出它的整个字符串。

+12

不需要'print';只是'sys.stdout.write('a')'...... – soulseekah 2010-12-21 12:20:45

+4

@Soulseekah:是的,在这种情况下只使用'sys.stdout.write()'更方便。然而,我想表明,写一个空字符串到stdout可以压缩使用'print'编写的元素之间的空间,这在类似的情况下可能很有用。 – 2010-12-21 12:58:44

+0

这是一个伟大的提示:) – soulseekah 2010-12-21 13:02:35

您可以打印退格字符('\b'):

for i in xrange(20): 
    print '\ba', 

结果:

aaaaaaaaaaaaaaaaaaaa 
+13

这是一个有趣的答案;) – webwurst 2012-04-26 14:29:02

+16

这是一个很好的角色,你在上一次输出结束时已经到了那里。 Omnomnomnom! – nitro2k01 2012-09-30 14:01:27

http://docs.python.org/whatsnew/2.6.html#pep-3105-print-as-a-function

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

显然是只对Python 2.6或更高版本。

+10

这是正确的答案。 – Purrell 2012-02-13 00:45:21

Python 3.x都有:

for i in range(20): 
    print('a', end='') 

的Python 2.6或2.7:

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

如果你想让他们出现一次一个,你可以这样做:

import time 
import sys 
for i in range(20): 
    sys.stdout.write('a') 
    sys.stdout.flush() 
    time.sleep(0.5) 

sys.stdout.flush()是必要的强制字符每个循环一次被写入。

正如一个方面说明:

印刷是O(1)但建立一个字符串,然后印刷是O(n),其中n是字符串中的字符的总数目。所以是的,虽然建立字符串是“更清洁”,但它不是最有效的方法。

我会做的事情是这样的,如下所示:

from sys import stdout 
printf = stdout.write 

现在你有一个“打印功能”打印出你给它的任何字符串不必每次都返回新行字符。

printf("Hello,") 
printf("World!") 

输出结果是:Hello,World!但是,如果要打印整数,浮点数或其他非字符串值,则必须使用str()函数将它们转换为字符串。

printf(str(2) + " " + str(4)) 

输出将是:2 4

+0

为什么使用printf ?,这不会格式化打印。 – 2015-01-01 13:35:03

+0

你是否说我可以在输出一个字符的同一时间输出无限量的文本? – 2015-01-01 13:35:52

+0

当我将printf重新定义为stdout.write时,我的stdout.write似乎正在打印字符串为“chartal”的数字:“你好,6” 什么给出了?这是怎么回事?我该如何阻止它? – Tom 2016-08-20 00:13:52