Re: Modifying every alternate element of a sequence
- From: Tim Chase <python.list@xxxxxxxxxxxxxxxxx>
- Date: Tue, 28 Nov 2006 05:18:18 -0600
I have a list of numbers and I want to build another list with every
second element multiplied by -1.
input = [1,2,3,4,5,6]
wanted = [1,-2,3,-4,5,-6]
I can implement it like this:
input = range(3,12)
wanted = []
for (i,v) in enumerate(input):
if i%2 == 0:
wanted.append(v)
else:
wanted.append(-v)
>>> input = range(3,12)
>>> [i%2==0 and v or -v for (i,v) in enumerate(input)]
[3, -4, 5, -6, 7, -8, 9, -10, 11]
> But is there any other better way to do this.
I'm not sure densely packing it into a list comprehension is necessarily a *better* way, just a more compact way.
To make more sense of it, you might create a helper function that does your comparison work:
def inv_if(v, test):
if test:
return v
else:
return -v
[inv_if(v, i%2==0) for (i,v) in enumerate(input)]
Or you could even do something like
def inv_alternating(t):
i, v = t
if i%2==0:
return v
else:
return -v
[inv_alternating(t) for t in enumerate(input)]
Either compacts it for the actual call within a list comprehension, but it is cleaner to read what's going on.
-tkc
.
- References:
- Modifying every alternate element of a sequence
- From: jm.suresh@xxxxxxxxxxxxxxxxx
- Modifying every alternate element of a sequence
- Prev by Date: Re: How to increase the speed of this program?
- Next by Date: Re: Modifying every alternate element of a sequence
- Previous by thread: Modifying every alternate element of a sequence
- Next by thread: Re: Modifying every alternate element of a sequence
- Index(es):
Relevant Pages
|