没有换行的打印(打印'a',)打印一个空格,如何删除?

时间:2010-12-21 12:09:42

标签: python string printing python-2.x

我有这段代码:

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

有可能吗?

12 个答案:

答案 0 :(得分:129)

有很多方法可以达到你的结果。如果您只是想要针对您的案例制定解决方案,请使用string multiplication作为@Ant提及。只有在每个print语句打印相同的字符串时,这才会起作用。请注意,它适用于任何长度字符串的乘法(例如'foo' * 20有效)。

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

如果您想要执行此操作,请构建一个字符串然后再打印一次。这会占用字符串的一些内存,但只能调用print。请注意,使用+=的字符串连接现在是您连接的字符串大小的线性,因此速度很快。

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

或者您可以使用sys.stdoutwrite()更直接地执行此操作,print是一个包装器。这将只写你给它的原始字符串,没有任何格式。请注意,即使在20 a s的末尾也不会打印换行符。

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

答案 1 :(得分:119)

来自PEP 3105: print As a Function文档中的What’s New in Python 2.6

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

显然,只适用于python 3.0或更高版本(或者开始时带有from __future__ import print_function的2.6+)。 {@ 1}}语句已删除,默认情况下在Python 3.0中成为print函数。

答案 2 :(得分:41)

您可以通过在print语句之间将空字符串打印到标准输出来禁止空格。

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

但是,更简洁的解决方案是首先构建您要打印的整个字符串,然后使用单个print语句输出它。

答案 3 :(得分:34)

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

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

结果:

aaaaaaaaaaaaaaaaaaaa

答案 4 :(得分:30)

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='')

答案 5 :(得分:10)

如果您希望它们一次显示一个,则可以执行以下操作:

import time
import sys
for i in range(20):
    sys.stdout.write('a')
    sys.stdout.flush()
    time.sleep(0.5)
每次循环运行时都需要

sys.stdout.flush()强制写入字符。

答案 6 :(得分:7)

正如旁注:

打印是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

答案 7 :(得分:6)

没有什么? 你的意思是

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

答案 8 :(得分:6)

要么Ant says,要么累积成字符串,然后打印一次:

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

答案 9 :(得分:3)

这真的很简单

对于python 3+版本,您只需编写以下代码

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

只需将循环转换为以下代码,您就不必担心其他事情

答案 10 :(得分:2)

<强> WOW !!!

非常很长时间以前

现在,在 python 3.x 中,它将非常简单

代码:

for i in range(20):
      print('a',end='') # here end variable will clarify what you want in 
                        # end of the code

输出:

aaaaaaaaaaaaaaaaaaaa 

有关print()函数的更多信息

print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)

<强>以下

value1,value2,value3

您可以使用逗号

打印多个值
sep = '-'

3个值将以' - '字符

分隔

你可以使用任何字符代替甚至字符串,如sep ='@'或sep ='good'

end='\n'

默认打印功能将'\ n'字符放在输出结尾

但您可以通过更改结束变量值来使用任何字符或字符串

喜欢end ='$'或end ='。'或者结束='你好'

file=sys.stdout

这是默认值,系统标准输出

使用此参数,您可以创建输出文件流,如

print("I am a Programmer", file=open("output.txt", "w"))

通过此代码,您将创建一个名为 output.txt 的文件,其中包含您的输出 我是程序员将被存储

flush = False

这是默认值 使用 flush = True ,您可以强行清除信息流

答案 11 :(得分:2)

就这么简单

Dim olApp As Object

On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If olApp Is Nothing Then
    Set olApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0

If Not olApp Is Nothing Then
    'run the command for sending an email
Else
    'open/display the current users document folder
End If

'do some stuff...

Set olApp = Nothing