query on python list

Mike Meyer mwm at mired.org
Wed Dec 28 00:28:42 EST 2005


muttu2244 at yahoo.com writes:
> hi tim
> thanks for the help
> acutally i dint tell u the whole problem
> i have list of lists, for ex
>
> list1 =[ ['a','b','c','d','e'] , ['1','2','3','4'] ,  ['A','B','C','D']
> ]
>
> and another list
>
> list2 = ['1','2','5',4]
>
> now am searching the items of list2 in list1 as below
>
> Found = True
> for i in list1:
>     for j in i:
>         if not list2[1] == j or not list2[2] == j:
>                 if not list2[0] == j:
>                     Found = False
>                 elif list2[0] == j:
>                     Found = True
>                     break
>
> now though it finds the the key in between and sets the "Found=True",
> but later in the next list of if one item doesnt match it sets again
> Found = False
>
> i hope am clear this time

You have half the solution. Basically, you should set Found to one
state, and then only set it againn if it changes. For instance:

Found = True
for i in list1:
    for j in i:
        if not list2[1] == j or not list2[2] == j:
           if not list2[0] == j:
              Found = False

This will exit the outer loop with Found being False if and only if
the nested if's in your inner loop set it to False; you never need to
set it to True. Alternatively, set the initial state to False, and
only set it to True if you find something.

For efficiency, you can break from the inner loop, and then check
found after the inner loop and break a second time if it's changed.

BTW, the nested ifs in your inner loop don't do what your description
says they should.

           <mike


Mike Meyer <mwm at mired.org>			http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.



More information about the Python-list mailing list