Misuse of list comprehensions?

Colin J. Williams cjw at ncf.ca
Tue May 20 20:52:59 EDT 2008


Colin J. Williams wrote:
> John Salerno wrote:
>> I posted this code last night in response to another thread, and after 
>> I posted it I got to wondering if I had misused the list 
>> comprehension. Here's the two examples:
>>
>> Example 1:
>> --------------------
>> def compress(s):
>>     new = []
>>
>>     for c in s:
>>         if c not in new:
>>             new.append(c)
>>     return ''.join(new)
>> ----------------------
>>
>> Example 2:
>> ------------------------
>> def compress(s):
>>     new = []
>>     [new.append(c) for c in s if c not in new]
>>     return ''.join(new)
>> --------------------------
>>
>> In example 1, the intention to make an in-place change is explicit, 
>> and it's being used as everyone expects it to be used. In example 2, 
>> however, I began to think this might be an abuse of list 
>> comprehensions, because I'm not assigning the result to anything (nor 
>> am I even using the result in any way).
>>
>> What does everyone think about this? Should list comprehensions be 
>> used this way, or should they only be used to actually create a new 
>> list that will then be assigned to a variable/returned/etc.?
>>
> 
> Alternative ways of of looking at the problem are:
> 
> # compress.py
> import sets
> 
> def compress(s):
>     new = []
>     [new.append(c) for c in s if c not in new]
>     return ''.join(new)
> 
> def compress1(s):
>   new= []
>   d= dict(zip(s, len(s)*[[]]))
>   return d.keys()
> 
> def compress2(st):
>   s= sets.Set(st)
>   return s
> 
> if __name__ == "__main__":
>   s= 'In example 1, the intention to make an in-place change is 
> explicit, and it is'
>   print (compress(s))
>   print (compress1(s))
>   print (compress2(s))
> 
> Results:
> 
> In exampl1,thiok-cgsd
> ['a', ' ', 'c', 'e', 'i', 'g', 'I', 'h', 'k', '-', 'm', 'l', 'o', 'n', 
> '1', 'p', 's', 't', 'x', ',', 'd']
> Set(['a', ' ', 'c', 'e', 'i', 'g', 'I', 'h', 'k', '-', 'm', 'l', 'o', 
> 'n', '1', 'p', 's', 't', 'x', ',', 'd'])
> 
> Colin W.

I should have read all the responses 
before responding!

Paul McGuire had already suggested a set 
approach

Colin W.



More information about the Python-list mailing list