In python, if I say
print 'h'
I get the letter h and a newline. If I say
print 'h',
I get the letter h and no newline. If I say
print 'h', print 'm',
I get the letter h, a space, and the letter m. How can I prevent Python from printing the space?
The print statements are different iterations of the same loop so I can’t just use the + operator.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
In Python 3, use
print('h', end='')
to suppress the endline terminator, and
print('a', 'b', 'c', sep='')
to suppress the whitespace separator between items. See the documentation for print
Method 2
import sys
sys.stdout.write('h')
sys.stdout.flush()
sys.stdout.write('m')
sys.stdout.flush()
You need to call sys.stdout.flush() because otherwise it will hold the text in a buffer and you won’t see it.
Method 3
Greg is right– you can use sys.stdout.write
Perhaps, though, you should consider refactoring your algorithm to accumulate a list of <whatevers> and then
lst = ['h', 'm'] print "".join(lst)
Method 4
Or use a +, i.e.:
>>> print 'me'+'no'+'likee'+'spacees'+'pls' menolikeespaceespls
Just make sure all are concatenate-able objects.
Method 5
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
But really, you should use sys.stdout.write directly.
Method 6
For completeness, one other way is to clear the softspace value after performing the write.
import sys print "hello", sys.stdout.softspace=0 print "world", print "!"
prints helloworld !
Using stdout.write() is probably more convenient for most cases though.
Method 7
This may look stupid, but seems to be the simplest:
print 'h',
print 'bm'
Method 8
Regain control of your console! Simply:
from __past__ import printf
where __past__.py contains:
import sys
def printf(fmt, *varargs):
sys.stdout.write(fmt % varargs)
then:
>>> printf("Hello, world!n")
Hello, world!
>>> printf("%d %d %dn", 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('n')
abc
>>>
Bonus extra: If you don’t like print >> f, ..., you can extending this caper to fprintf(f, …).
Method 9
I am not adding a new answer. I am just putting the best marked answer in a better format.
I can see that the best answer by rating is using sys.stdout.write(someString). You can try this out:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
will yield:
HelloWorld
That is all.
Method 10
In 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
>>>
So using print_function from __future__ you can set explicitly the sep and end parameteres of print function.
Method 11
You can use print like the printf function in C.
e.g.
print “%s%s” % (x, y)
Method 12
print("{0}{1}{2}".format(a, b, c))
Method 13
sys.stdout.write is (in Python 2) the only robust solution. Python 2 printing is insane. Consider this code:
print "a", print "b",
This will print a b, leading you to suspect that it is printing a trailing space. But this is not correct. Try this instead:
print "a",
sys.stdout.write("0")
print "b",
This will print a0b. How do you explain that? Where have the spaces gone?
I still can’t quite make out what’s really going on here. Could somebody look over my best guess:
My attempt at deducing the rules when you have a trailing , on your print:
First, let’s assume that print , (in Python 2) doesn’t print any whitespace (spaces nor newlines).
Python 2 does, however, pay attention to how you are printing – are you using print, or sys.stdout.write, or something else? If you make two consecutive calls to print, then Python will insist on putting in a space in between the two.
Method 14
print('''first line
second line''')
it will produce
first line second line
Method 15
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0