Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

    
            
  •              ¿Cómo imprimir sin nueva línea o espacio?                                      21 respuestas                          
  •     
    

En python, si digo

print 'h'

Me sale la letra h y una nueva línea. Si digo

print 'h',

Me sale la letra h y no hay nueva línea. Si digo

print 'h',
print 'm',

Me sale la letra h, un espacio y la letra m. ¿Cómo puedo evitar que Python imprima el espacio?

Las declaraciones de impresión son iteraciones diferentes del mismo bucle, así que no puedo usar el operador +.

¿Fue útil?

Solución

Puedes usar:

sys.stdout.write('h')
sys.stdout.write('m')

Otros consejos

Solo un comentario. En Python 3 , utilizará

print('h', end='')

para suprimir el terminador de línea final y

print('a', 'b', 'c', sep='')

para suprimir el separador de espacios en blanco entre elementos.

Greg tiene razón: puedes usar sys.stdout.write

Quizás, sin embargo, debería considerar refactorizar su algoritmo para acumular una lista de < whatevers > y luego

lst = ['h', 'm']
print  "".join(lst)

O use un +, es decir:

>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls

Solo asegúrese de que todos sean objetos concatenados.

Python 2.5.2 (r252:60911, Sep 27 2008, 07:03:14)
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print "hello",; print "there"
hello there
>>> print "hello",; sys.stdout.softspace=False; print "there"
hellothere

Pero realmente, debe usar sys.stdout.write directamente.

Para completar, otra forma es borrar el valor del espacio suave después de realizar la escritura.

import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"

imprime helloworld !

Sin embargo, usar stdout.write () es probablemente más conveniente para la mayoría de los casos.

Esto puede parecer estúpido, pero parece ser el más simple:

    print 'h',
    print '\bm'

¡Recupere el control de su consola! Simplemente:

from __past__ import printf

donde __past__.py contiene:

import sys
def printf(fmt, *varargs):
    sys.stdout.write(fmt % varargs)

entonces:

>>> printf("Hello, world!\n")
Hello, world!
>>> printf("%d %d %d\n", 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('\n')
abc
>>>

Bonus extra: si no te gusta print >> f, ..., puedes extender esta travesura a fprintf (f, ...).

No estoy agregando una nueva respuesta. Solo estoy poniendo la respuesta mejor marcada en un mejor formato. Puedo ver que la mejor respuesta por calificación es usar sys.stdout.write(someString). Puedes probar esto:

    import sys
    Print = sys.stdout.write
    Print("Hello")
    Print("World")

producirá:

HelloWorld

Eso es todo.

En python 2.6:

>>> print 'h','m','h'
h m h
>>> from __future__ import print_function
>>> print('h',end='')
h>>> print('h',end='');print('m',end='');print('h',end='')
hmh>>>
>>> print('h','m','h',sep='');
hmh
>>>

Entonces, utilizando print_function de __future__ puede establecer explícitamente los parámetros sep y end de la función de impresión.

Puede usar imprimir como la función printf en C.

por ejemplo

print "% s% s " % (x, y)

print("{0}{1}{2}".format(a, b, c))

sys.stdout.write es (en Python 2) la única solución robusta. La impresión de Python 2 es una locura. Considere este código:

print "a",
print "b",

Esto imprimirá a b, lo que le llevará a sospechar que está imprimiendo un espacio final. Pero esto no es correcto. Intente esto en su lugar:

print "a",
sys.stdout.write("0")
print "b",

Esto imprimirá a0b. ¿Cómo explicas eso? ¿Dónde se han ido los espacios?

Todavía no puedo entender lo que realmente está pasando aquí. ¿Podría alguien mirar por encima de mi mejor conjetura:

Mi intento de deducir las reglas cuando tiene un , final en su print :

Primero, supongamos que print , (en Python 2) no imprime ningún espacio en blanco (espacios ni líneas nuevas).

Python 2, sin embargo, presta atención a cómo está imprimiendo: ¿está utilizando <=> o <=>, o algo más? Si realiza dos llamadas consecutivas a <=>, Python insistirá en poner un espacio entre las dos.

import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])
print('''first line \
second line''')

producirá

  

primera línea segunda línea

Tuve el mismo problema una vez que quise leer algunos dígitos de un archivo. Lo resolví así:

f = open('file.txt', 'r')
for line in f:   
    print(str.split(line)[0])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top