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