how to join array of integers?
Grant Edwards
grante at visi.com
Sat Sep 15 18:36:08 EDT 2007
On 2007-09-15, Robert Kern <robert.kern at gmail.com> wrote:
> Grant Edwards wrote:
>> On 2007-09-15, Erik Jones <erik at myemma.com> wrote:
>>
>>>>> print ''.join([str(i) for i in [1,2,3]])
>>>> It's better to use generator comprehension instead of LC:
>>>>
>>>> ",".join(str(i) for i in [1, 2, 3])
>>> Why is that? That entire expression must be evaluated to
>>> obtain the result, so what is the advantage of using a
>>> generator comprehension v. a list comprehension?
>>
>> The generator avoids creating the intermediate list -- it
>> generates the intermediate values on the fly. For short
>> sequences it probably doesn't matter much. For a very long
>> list it's probably noticable.
>
> Not true. str.join() creates a list from the iterator if it is
> not already a list or a tuple.
So the iterator avoids creating an intermediate list, but the
join method goes ahead and does it anyway?
> In Objects/stringobject.c, look at string_join(); it calls
> PySequence_Fast() on the argument. Looking in
> Objects/abstract.c, we see that PySequence_Fast()
> short-circuits lists and tuples but builds a full list from
> the iterable otherwise.
So what's the point of iterables if code is going to do stuff
like that when it wants to iterate over a sequence?
> map() seems to reliably be the fastest option,
Which is apparently going away in favor of the slower iterator
approach?
> and list comprehensions seem to slightly edge out generator
> comprehensions if you do the timings.
--
Grant Edwards grante Yow! Clear the
at laundromat!! This
visi.com whirl-o-matic just had a
nuclear meltdown!!
More information about the Python-list
mailing list