Imprimir sin nueva línea (imprimir 'a',) imprime un espacio, ¿cómo eliminarlo?


124

Tengo este codigo:

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

Quiero dar salida 'a', sin ' 'esto:

aaaaaaaaaaaaaaaaaaaa

¿Es posible?


44
Me sorprende que nadie haya mencionado aún "".join("a" for i in xrange(20)). (Es mucho más flexible que solo hacerlo "a" * 20, ya que supongo que es un ejemplo simplificado).
Thomas K

Respuestas:


131

Hay varias formas de lograr su resultado. Si solo desea una solución para su caso, use la multiplicación de cadenas como menciona @Ant . Esto solo funcionará si cada una de sus printdeclaraciones imprime la misma cadena. Tenga en cuenta que funciona para la multiplicación de cualquier cadena de longitud (por ejemplo, 'foo' * 20funciona).

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

Si desea hacer esto en general, cree una cadena y luego imprímala una vez. Esto consumirá un poco de memoria para la cadena, pero solo hará una sola llamada a print. Tenga en cuenta que la concatenación de cadenas que utiliza +=ahora es lineal en el tamaño de la cadena que está concatenando, por lo que será rápido.

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

O puede hacerlo más directamente usando sys.stdout . write () , que printes una envoltura alrededor. Esto escribirá solo la cadena sin formato que le dé, sin ningún formato. Tenga en cuenta que no se imprime nueva línea incluso al final de los 20 as.

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

Python 3 cambia la printdeclaración en una función print () , que le permite establecer un endparámetro. Puede usarlo en> = 2.6 importando desde __future__. Sin embargo, evitaría esto en cualquier código serio 2.x, ya que será un poco confuso para aquellos que nunca han usado 3.x. Sin embargo, debería darle una idea de algunas de las bondades que trae 3.x.

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

44
@AAI leyó la pregunta cuando estaba presente la respuesta de multiplicación de cadenas, y pensé que daría una visión general de varias opciones. Los otros vinieron mientras yo estaba preparando mi respuesta. Fue aceptado poco después, de lo contrario, probablemente lo habría eliminado.
moinudin

10
-1 No acumule cadenas por concatenación; es O (n ^ 2) en lugar de O (n). Usar en su "".join(...)lugar.
Katriel

10
No tengo ningún problema con su respuesta, resume todo y eso es bueno. Pero al hacer esto, desalienta a otras personas que responden. Hay muchas buenas respuestas y todas merecen +1. Imagínense si todos comenzaran a hacer resúmenes.
user225312

3
@katrielalex: ¿Importa? ¿El OP ha pedido optimización o complejidad? ¿Y será importante para 20 cuerdas? Vamos, en serio debes estar bromeando.
user225312

1
@katrielalex Incorrecto, la concatenación de cadenas que se usa +=en Python es una operación de tiempo constante para la concatenación de un solo carácter.
moinudin


41

Puede suprimir el espacio imprimiendo una cadena vacía para stdout entre las printdeclaraciones.

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

Sin embargo, una solución más limpia es construir primero la cadena completa que desea imprimir y luego generarla con una sola printdeclaración.


44
@Soulseekah: Sí, usar solo sys.stdout.write()es más conveniente en este caso. Sin embargo, quería mostrar que escribir una cadena vacía en stdout suprime el espacio entre los elementos escritos usando print, lo que podría ser útil en situaciones similares.
Pär Wieslander

34

Puede imprimir un carácter de retroceso ( '\b'):

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

resultado:

aaaaaaaaaaaaaaaaaaaa

30

Python 3.x:

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

Python 2.6 o 2.7:

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

10

Si desea que aparezcan uno a la vez, puede hacer esto:

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

sys.stdout.flush() Es necesario forzar la escritura del carácter cada vez que se ejecuta el bucle.


7

Solo como una nota al margen:

La impresión es O (1) pero la construcción de una cadena y luego la impresión es O (n), donde n es el número total de caracteres en la cadena. Entonces sí, mientras que construir la cadena es "más limpia", no es el método más eficiente para hacerlo.

La forma en que lo haría es la siguiente:

from sys import stdout
printf = stdout.write

Ahora tiene una "función de impresión" que imprime cualquier cadena que le dé sin devolver el nuevo carácter de línea cada vez.

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

La salida será: ¡Hola, mundo!

Sin embargo, si desea imprimir números enteros, flotantes u otros valores que no sean cadenas, deberá convertirlos en una cadena con la función str ().

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

La salida será: 2 4


¿Dices que puedo generar una cantidad infinita de texto al mismo tiempo que imprimo un carácter?
ctrl-alt-delor

Cuando redefiní printf en stdout.write, mi stdout.write parece estar imprimiendo el número de caracteres que la cadena es: "Hola, 6" ¿Qué da? ¿Que esta pasando? ¿Y cómo lo detengo?
Tom

1
Además, ¿puedes explicar qué quieres decir con O (1) O (n)? No entiendo a qué se refiere
Tom

@Tom Se refiere a la complejidad (notación Big O) como un reflejo de la costo de la operación. O (1) es tiempo constante, ideal , y O (n) es tiempo lineal, bueno, pero demasiado caro para algo tan simple. Aunque, para cosas pequeñas, el tiempo que pasa usando su cerebro para preocuparse por estas cosas es más inútil desde el punto de vista computacional que simplemente usar la concatenación de cadenas.
Benjamin R

6

O lo que dice Ant , o se acumula en una cadena, luego imprime una vez:

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

6

¿sin que? Quieres decir

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

?


3

esto es realmente simple

para las versiones de Python 3+ solo tienes que escribir los siguientes códigos

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

solo convierta el bucle a los siguientes códigos, no tiene que preocuparse por otras cosas


2

¡¡¡GUAU!!!

Es bastante mucho tiempo atrás

Ahora, en python 3.x será bastante fácil

código:

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

salida:

aaaaaaaaaaaaaaaaaaaa 

Más información sobre la función print ()

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

Aquí :

value1,value2,value3

puedes imprimir múltiples valores usando comas

sep = '-'

3 valores estarán separados por el carácter '-'

puede usar cualquier carácter en lugar de esa cadena uniforme como sep = '@' o sep = 'good'

end='\n'

de forma predeterminada, la función de impresión coloca el carácter '\ n' al final de la salida

pero puede usar cualquier carácter o cadena cambiando el valor de la variable final

como end = '$' o end = '.' o end = 'Hola'

file=sys.stdout

este es un valor predeterminado, salida estándar del sistema

usando este argumento puede crear una secuencia de archivo de salida como

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

por este código va a crear un archivo llamado salida.txt donde su salida Soy un programador se almacenará

flush = False

Es un valor predeterminado que usa flush = True , puede eliminar el flujo a la fuerza


2

Tan sencillo como eso

def printSleeping():
     sleep = "I'm sleeping"
     v = ""
     for i in sleep:
         v += i
         system('cls')
         print v
         time.sleep(0.02)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.