Reputation: 6906
In the Python console, when I type:
>>> "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
Gives:
'I\nwould\nexpect\nmultiple\nlines'
Though I'd expect to see such an output:
I
would
expect
multiple
lines
What am I missing here?
Upvotes: 137
Views: 240071
Reputation: 1622
The repr() function returns a printable representation of the given object and is crucial for evalStr() or exec in Python; for example you want to get out the Zen of Python:
eng.execString('from this import *');
println('import this:'+CRLF+
stringReplace(eng.EvalStr('repr("".join([d.get(c,c) for c in s]))'),'\n',CRLF,[rfReplaceAll]));
Upvotes: 1
Reputation: 19486
You need to print
to get that output.
You should do
>>> x = "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
>>> x # this is the value, returned by the join() function
'I\nwould\nexpect\nmultiple\nlines'
>>> print x # this prints your string (the type of output you want)
I
would
expect
multiple
lines
Upvotes: 19
Reputation: 48766
When you print it with this print 'I\nwould\nexpect\nmultiple\nlines'
you would get:
I
would
expect
multiple
lines
The \n
is a new line character specially used for marking END-OF-TEXT. It signifies the end of the line or text. This characteristics is shared by many languages like C, C++ etc.
Upvotes: 4
Reputation: 400159
The console is printing the representation, not the string itself.
If you prefix with print
, you'll get what you expect.
See this question for details about the difference between a string and the string's representation. Super-simplified, the representation is what you'd type in source code to get that string.
Upvotes: 113
Reputation: 63787
You forgot to print
the result. What you get is the P
in RE(P)L
and not the actual printed result.
In Py2.x you should so something like
>>> print "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
I
would
expect
multiple
lines
and in Py3.X, print is a function, so you should do
print("\n".join(['I', 'would', 'expect', 'multiple', 'lines']))
Now that was the short answer. Your Python Interpreter, which is actually a REPL, always displays the representation of the string rather than the actual displayed output. Representation is what you would get with the repr
statement
>>> print repr("\n".join(['I', 'would', 'expect', 'multiple', 'lines']))
'I\nwould\nexpect\nmultiple\nlines'
Upvotes: 57
Reputation: 80456
You have to print it:
In [22]: "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
Out[22]: 'I\nwould\nexpect\nmultiple\nlines'
In [23]: print "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
I
would
expect
multiple
lines
Upvotes: 6