On May 20, 10:17 am, Arnaud Delobelle <[EMAIL PROTECTED]> wrote: > 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- Hide quoted text - > > - Show quoted text -
Unfortunately, no. "seen.add(c) or c not in seen" will never return true, since c gets added to seen before testing if c in seen. -- Paul -- http://mail.python.org/mailman/listinfo/python-list