Simple - looking for a way to do an element exists check..
thebjorn
BjornSteinarFjeldPettersen at gmail.com
Sat Feb 23 20:19:47 EST 2008
On Feb 23, 6:18 pm, Paul Hankin <paul.han... at gmail.com> wrote:
> On Feb 22, 7:01 pm, Paul McGuire <pt... at austin.rr.com> wrote:
>
> > On Feb 22, 12:54 pm, Paul Rubin <http://phr...@NOSPAM.invalid> wrote:
>
> > > Paul Rubin <http://phr...@NOSPAM.invalid> 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
More information about the Python-list
mailing list