About a list comprehension to transform an input list
Emile van Sebille
emile at fenx.com
Fri Jun 8 12:43:55 EDT 2012
On 6/8/2012 9:17 AM Daniel Urban said...
> On Fri, Jun 8, 2012 at 6:10 PM, Julio Sergio<juliosergio at gmail.com> wrote:
>> > From a sequence of numbers, I'm trying to get a list that does something to even
>> numbers but leaves untouched the odd ones, say:
>>
>> [0,1,2,3,4,...] ==> [100,1,102,3,104,...]
>>
>> I know that this can be done with an auxiliary function, as follows:
>>
>> ->>> def filter(n):
>> ... if (n%2 == 0):
>> ... return 100+n
>> ... return n
>> ...
>> ->>> L = range(10)
>> ->>> [filter(n) for n in L]
>> [100, 1, 102, 3, 104, 5, 106, 7, 108, 9]
>>
>> I wonder whether there can be a single list comprehension expression to get this
>> result without the aid of the auxiliary function.
>>
>> Do you have any comments on this?
>
>>>> l = [0,1,2,3,4,5,6,7,8,9]
>>>> [n if n%2 else 100+n for n in l]
> [100, 1, 102, 3, 104, 5, 106, 7, 108, 9]
>
Or alternately by leveraging true/false as 1/0:
>>> [ 100*(not(ii%2))+ii for ii in range(10)]
[100, 1, 102, 3, 104, 5, 106, 7, 108, 9]
>>> [ 100*(ii%2)+ii for ii in range(10)]
[0, 101, 2, 103, 4, 105, 6, 107, 8, 109]
More information about the Python-list
mailing list