transforming a list into a string
Andrew Bennetts
andrew-pythonlist at puzzling.org
Sat Jul 31 21:00:32 EDT 2004
On Sat, Jul 31, 2004 at 08:43:52PM -0400, Roy Smith wrote:
> Tim Peters <tim.peters at gmail.com> wrote:
> > Note that Peter Otten previously posted a lovely O(N)
> > solution in this thread, although it may be too clever for some
> > tastes:
> >
> > >>> from itertools import izip
> > >>> items = ['1','2','7','8','12','13']
> > >>> it = iter(items)
> > >>> ",".join(["{%s,%s}" % i for i in izip(it, it)])
> > '{1,2},{7,8},{12,13}'
>
> Personally, I'm not a big fan of clever one-liners. They never seem
> like such a good idea 6 months from now when you're trying to figure out
> what you meant when you wrote it 6 months ago.
It's a two-liner, not a one-liner (although it could be made into a
one-liner with enough contortions...).
The only other way I could see to expand this solution would be to write it
as:
it = iter(items)
pairs = izip(it, it)
s = ",".join(["{%s,%s}" % i for i in pairs])
I don't know if three-liners meet your threshold for verbosity ;)
Well, you could write it as:
pairs = []
it = iter(items):
while True:
try:
pair = it.next(), it.next()
except StopIteration:
break
pairs.append(pair)
s = ",".join(["{%s,%s}" % i for i in pairs])
But at that point, the scaffolding is large enough that it obscures the
purpose -- I definitely find this harder to read than the two-liner.
I find Peter's original form easy to read -- if you understand how "izip(it,
it)" works (which is a very simple and elegant way to iterate over (it[n],
it[n+1]) pairs), the rest is very clear.
-Andrew.
More information about the Python-list
mailing list