Печать без новой строки (печать '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

Возможно ли это?

Ответ 1

Есть несколько способов достижения вашего результата. Если вы просто хотите найти решение для своего случая, используйте умножение строк, как упоминает @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>>> 

Ответ 2

Из 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.

Ответ 3

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

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

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

Ответ 4

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

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

результат:

aaaaaaaaaaaaaaaaaaaa

Ответ 5

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

Ответ 6

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

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

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

Ответ 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

Ответ 8

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

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

?

Ответ 9

Либо что Ant говорит, либо накапливается в строке, а затем печатается один раз:

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

Ответ 10

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

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

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

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

Ответ 11

ВОТ ЭТО ДА!!!

Это довольно давно

Теперь, в 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, вы можете принудительно очистить поток

Ответ 12

так просто

def printSleeping():
     sleep = "I'm sleeping"
     v = ""
     for i in sleep:
         v += i
         system('cls')
         print v
         time.sleep(0.02)