不使用换行符打印(打印'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
这可能吗?
有许多的实现你的结果的方式。如果您只是想为您的案例寻求解决方案,请使用string multiplication作为@Ant提及。如果您的每个print
语句都打印相同的字符串,这只会起作用。请注意,它适用于任何长度字符串的乘法运算(例如'foo' * 20
作品)。
如果你想这样做一般,建立一个字符串,然后打印一次。这会消耗一些字符串的内存,但只能拨打print
。请注意,使用+=
的字符串连接现在与要连接的字符串的大小成线性关系,因此这将很快。
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
或者你可以更直接地使用sys.stdout。 write(),其中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>>>
@A A当字符串乘法答案出现时,我阅读了这个问题,并且认为我会给出几个选项的概述。其他人来时,我正在把我的答案放在一起。它很快就被接受了,否则我可能会删除它。 – marcog 2010-12-21 12:59:08
-1不要通过串联建立字符串;它是O(n^2)而不是O(n)。改用'“”.join(...)'。 – katrielalex 2010-12-21 13:02:16
我对你的答案没有任何问题,它总结了一切,这很好。但通过这样做,你会阻止其他回答的人。有很多很好的答案,都值得+1。试想一下,如果每个人都开始做总结。 – user225312 2010-12-21 13:03:41
没有什么?你的意思是
?
您可以通过打印一个空字符串print
语句之间到stdout抑制的空间。
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
然而,一个更清洁的解决方案是先构建你想打印,然后用单print
语句输出它的整个字符串。
不需要'print';只是'sys.stdout.write('a')'...... – soulseekah 2010-12-21 12:20:45
@Soulseekah:是的,在这种情况下只使用'sys.stdout.write()'更方便。然而,我想表明,写一个空字符串到stdout可以压缩使用'print'编写的元素之间的空间,这在类似的情况下可能很有用。 – 2010-12-21 12:58:44
这是一个伟大的提示:) – soulseekah 2010-12-21 13:02:35
从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或更高版本。
这是正确的答案。 – 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
为什么使用printf ?,这不会格式化打印。 – 2015-01-01 13:35:03
你是否说我可以在输出一个字符的同一时间输出无限量的文本? – 2015-01-01 13:35:52
当我将printf重新定义为stdout.write时,我的stdout.write似乎正在打印字符串为“chartal”的数字:“你好,6” 什么给出了?这是怎么回事?我该如何阻止它? – Tom 2016-08-20 00:13:52
我很惊讶,没有一个人没有提到' “”。加入( “A” 为我的xrange(20))'。 (它比仅仅做一个“* 20”更灵活,因为我认为这是一个简单的例子)。 – 2010-12-21 12:59:30