关于python:没有换行的打印(打印’a’,)打印一个空格,如何删除?

Printing without newline (print 'a',) prints a space, how to remove?

我有这个代码:

1
2
3
4
>>> 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',而不是像这样的' '

1
aaaaaaaaaaaaaaaaaaaa

可能吗?


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

1
2
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

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

1
2
3
4
5
>>> for i in xrange(20):
...     s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa

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

1
2
3
4
5
>>> 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带来的一些善良。

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


从PEP 3105:打印作为Python 2.6文档中的新功能:

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

显然,只适用于python 3.0或更高版本(或2.6+,开头为from __future__ import print_function)。 print语句已删除,默认情况下在Python 3.0中成为print()函数。


您可以通过在print语句之间将空字符串打印到stdout来抑制空间。

1
2
3
4
5
6
>>> import sys
>>> for i in range(20):
...   print 'a',
...   sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa

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


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

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

结果:

1
aaaaaaaaaaaaaaaaaaaa

Python 3.x:

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

Python 2.6或2.7:

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

如果您希望它们一次显示一个,您可以这样做:

1
2
3
4
5
6
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是字符串中的字符总数。所以是的,虽然构建字符串是"更干净",但这不是最有效的方法。

我这样做的方式如下:

1
2
from sys import stdout
printf = stdout.write

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

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

输出将是:Hello,World!

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

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

输出将是:2 4


无论是Ant说什么,还是累积成一个字符串,然后打印一次:

1
2
3
4
s = '';
for i in xrange(20):
    s += 'a'
print s

没有什么?
你的意思是

1
2
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa


这很简单

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

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

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


就如此容易

1
2
3
4
5
6
7
8
def printSleeping():
     sleep ="I'm sleeping"
     v =""
     for i in sleep:
         v += i
         system('cls')
         print v
         time.sleep(0.02)


哇!!!

很久以前

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

码:

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

输出:

1
aaaaaaaaaaaaaaaaaaaa

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

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

这里:

1
value1,value2,value3

您可以使用逗号打印多个值

1
sep = '-'

3个值将以" -"字符分隔

你可以使用任何字符而不是像sep ='@'或sep ='good'那样的字符串

1
2
end='
'

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

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

比如end ='$'或者end ='。'或者结束='你好'

1
file=sys.stdout

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

使用此参数可以创建类似的输出文件流

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

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

1
flush = False

这是默认值
使用flush = True可以强制刷新流