Paul McGuire <[EMAIL PROTECTED]> writes: > On May 20, 8:13 am, "John Salerno" <[EMAIL PROTECTED]> 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.? > > Why not make the list comp the actual list you are trying to build? > > def compress(s): > seen = set() > new = [c for c in s if c not in seen and (seen.add(c) or True)]
<split hairs> Isn't c not in seen and (seen.add(c) or True) the same as seen.add(c) or c not in seen ? > return ''.join(new) > (notice I haven't closed the tag!) -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list