escape sequences in list comprehensions
Josiah Carlson
jcarlson at uci.edu
Sat Nov 13 04:17:19 EST 2004
bokr at oz.net (Bengt Richter) wrote:
>
> On Fri, 12 Nov 2004 22:46:17 -0500, Peter Hansen <peter at engcorp.com> wrote:
>
> >kartik wrote:
> >> Escape sequences don't seem to work in strings within list comprehensions:
> >>
> >>>>>print ['%s\n' %i for i in [1,2,3]]
> >>
> >> ['1\n', '2\n', '3\n']
> >>
> >> What am I missing?
> >
> >Others have answered, but not explained. When you print
> >a list (in other words, when you display the results of
> >calling str() on a list), the list chooses how to display
> >itself. It chooses to display the brackets at the start
> >and end, the commas separating the items, and the results
> >of calling repr() on each individual item. That means
> >that strings are shown with quotation marks (which are not
> >part of the string normally) and with special characters
> >represented as escape sequences.
> >
> >The following appears to be what you believed you wanted,
> >though it's not really what you wanted <wink>:
> >
> >lst = ['%s\n' % i for i in [1,2,3]]
> >print '[' + ', '.join([str(x) for x in lst]) + ']'
> >
> Maybe this is what he wanted (not recommended for general use ;-):
>
> >>> class FunnyStr(str):
> ... def __repr__(self): return str(self)
> ...
>
> Plain:
> >>> lst = ['%s\n' % i for i in [1,2,3]]
> >>> lst
> ['1\n', '2\n', '3\n']
>
> Funny:
> >>> lst = [FunnyStr('%s\n' % i) for i in [1,2,3]]
> >>> lst
> [1
> , 2
> , 3
> ]
> >>> print lst
> [1
> , 2
> , 3
> ]
If that's really what he wants, he should take a look at the pprint
module.
- Josiah
More information about the Python-list
mailing list