Печать без перевода строки (печать 'a',) печатает пробел, как удалить? - PullRequest
123 голосов
/ 21 декабря 2010

У меня есть этот код:

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

129 голосов
/ 21 декабря 2010

Есть несколько способов достижения вашего результата. Если вы просто хотите найти решение для своего случая, используйте умножение строк , как упоминалось @ Ant . Это будет работать, только если каждый из ваших операторов print печатает одну и ту же строку. Обратите внимание, что он работает для умножения любой длины строки (например, 'foo' * 20 работает).

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

Если вы хотите сделать это в целом, создайте строку, а затем напечатайте ее один раз. Это потребует немного памяти для строки, но сделает только один вызов 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 () функцию , которая позволяет вам установить параметр end. Вы можете использовать его в> = 2.6, импортируя из __future__. Я бы избегал этого в любом серьезном коде 2.x, поскольку это будет немного запутанным для тех, кто никогда не использовал 3.x. Тем не менее, он должен дать вам почувствовать вкус добра, который приносит 3.x.

>>> from __future__ import print_function
>>> for i in xrange(20):
...     print('a', end='')
... 
aaaaaaaaaaaaaaaaaaaa>>> 
119 голосов
/ 21 декабря 2010

С PEP 3105: печать как функция в документе Что нового в Python 2.6 :

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

Очевидно, что это работает только с Python 3.0 или выше(или 2.6+ с from __future__ import print_function в начале).Оператор print был удален и стал функцией print() по умолчанию в Python 3.0.

41 голосов
/ 21 декабря 2010

Вы можете уменьшить пробел, напечатав пустую строку в стандартный вывод между операторами print.

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

Однако более чистое решение - сначала построить всю строку, которую вы хотите напечатать, изатем выведите его с помощью одного оператора print.

34 голосов
/ 21 декабря 2010

Вы можете напечатать символ возврата ('\b'):

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

результат:

aaaaaaaaaaaaaaaaaaaa
30 голосов
/ 21 декабря 2010

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='')
10 голосов
/ 06 сентября 2013

Если вы хотите, чтобы они появлялись по одному, вы можете сделать это:

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

sys.stdout.flush() необходимо для принудительной записи символа при каждом запуске цикла.

7 голосов
/ 04 мая 2014

Так же, как примечание:

Печать - это O (1), но строится строка, а затем - O (n), где n - общее количество символов в строке.Так что да, хотя построение строки «чище», это не самый эффективный способ сделать это.

Я бы сделал это следующим образом:

from sys import stdout
printf = stdout.write

Теперь у вас есть«функция печати», которая печатает любую строку, которую вы ей даете, не возвращая символ новой строки каждый раз.

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

Вывод будет: Hello, World!

Однако, если выЕсли вы хотите напечатать целые числа, числа с плавающей запятой или другие нестроковые значения, вам придется преобразовать их в строку с помощью функции str ().

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

Вывод будет:

6 голосов
/ 21 декабря 2010

Либо то, что Муравей говорит , либо накопить в строку, а затем вывести один раз:

s = '';
for i in xrange(20):
    s += 'a'
print s
6 голосов
/ 21 декабря 2010

без чего? ты имеешь в виду

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

3 голосов
/ 29 ноября 2018

это действительно просто

для версий Python 3+ необходимо написать только следующие коды

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

просто конвертируйте цикл в следующие коды, вам не нужно беспокоиться о других вещах

...