On Feb 23, 6:18 pm, Paul Hankin <[EMAIL PROTECTED]> wrote: > On Feb 22, 7:01 pm, Paul McGuire <[EMAIL PROTECTED]> wrote: > > > On Feb 22, 12:54 pm, Paul Rubin <http://[EMAIL PROTECTED]> wrote: > > > > Paul Rubin <http://[EMAIL PROTECTED]> writes: > > > > if any(x==element[0] for x in a): > > > > a.append(element) > > > > Should say: > > > > if any(x[0]==element[0] for x in a): > > > a.append(element) > > > I think you have this backwards. Should be: > > > if not any(x[0]==element[0] for x in a): > > a.append(element) > > IMO Jason's solution of testing containment in a generator is better > (more readable). > if element[0] not in (x[0] for x in a): > a.append(element) > > -- > Paul Hankin
It may be more readable (although that's debatable), but it always traverses the entire list. If the list is short I'd use either the traditional "for/else" or the newer "if all(...)": if all(x[0] != element[0] for x in a): a.append(element) which allows for short-circuit evaluation -- I generally try to stay away from negating any() and all() because the logic often gets convoluted. If the lists are long enough to care, either rewrite use a set-based solution if the items are hashable, or keep the elements sorted and rewrite to use the bisect module if the elements can be ordered. -- bjorn -- http://mail.python.org/mailman/listinfo/python-list