how to append to a list twice?

Gerard Flanagan grflanagan at yahoo.co.uk
Fri Apr 21 13:22:01 EDT 2006


Gerard Flanagan wrote:
> Gerard Flanagan wrote:
> > John Salerno wrote:
> > > If I want to create a list of the form [100, 99, 99, 98, 98, 97, 97...]
> > > (where each item is repeated twice after the first one), how might I do
> > > that most efficiently?
> >
> > series = [100]
> >
> > for i in range(1,10):
> >     series.extend([100-i]*2)
> >
> > print series
> >
> > [100, 99, 99, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 93, 93, 92, 92,
> > 91, 91]
>
> Alternative:
>
> ---------------------------------------------------------
> series = [100]
>
> r = xrange(99,90,-1)
>
> for L in ( [a1,a2] for a1,a2 in zip( r, r ) ):
>     series.extend(L)
>
> print series
>
> out: [100, 99, 99, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 93, 93, 92,
> 92, 91, 91]
>
> ---------------------------------------------------------
> series = ['a']
>
> r = 'bcdefgh'
>
> for L in ( [a1,a2] for a1,a2 in zip( r, r ) ):
>     series.extend(L)
>
> print series
>
> out:  ['a', 'b', 'b', 'c', 'c', 'd', 'd', 'e', 'e', 'f', 'f', 'g', 'g',
> 'h', 'h']
> ---------------------------------------------------------
>

(Nothing better to do!)

def multiplier( iterable, n ):
    for t in zip( *[iterable] * n):
        yield t

series1 = [100]
rng = xrange(99,90,-1)

for L in multiplier( rng, 2 ):
    series1.extend(L)

series2 = ['a']
rng = 'bcdefgh'
for L in multiplier( rng, 2 ):
    series2.extend(L)

print series1
print series2

Gerard




More information about the Python-list mailing list