125

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?

pradyunsg
  • 18,287
  • 11
  • 43
  • 96
TTT
  • 6,505
  • 10
  • 56
  • 82

6 Answers6

106

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.

Community
  • 1
  • 1
unwind
  • 391,730
  • 64
  • 469
  • 606
54

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'
Abhijit
  • 62,056
  • 18
  • 131
  • 204
17

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
pradyunsg
  • 18,287
  • 11
  • 43
  • 96
6

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
root
  • 76,608
  • 25
  • 108
  • 120
4

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.

Sibi
  • 47,472
  • 16
  • 95
  • 163
1

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]));
Max Kleiner
  • 1,442
  • 1
  • 13
  • 14