query on python list

M

muttu2244

hi all
am searching for a key in a list, am using

Found = 0
for item in list:
if not key == item:
Found = 0
elif key == item:
Found =1

Now based on the Found value i ll manipulate the list.
but whenever the "key and item" doesnt match it makes "Found = 0", even
though i have an item that matches the key, but it overwrites the Found
variable to 0, in the next loop when "key ! = item", and hence all my
calculations are going wrong,
If i find a key in my list, some how the variable "Found " should be
1,till it comes out of the loop.

How can i do that.

thanks in advance
yogi
 
T

Tim Hochberg

hi all
am searching for a key in a list, am using

Found = 0
for item in list:
if not key == item:
Found = 0
elif key == item:
Found =1

Now based on the Found value i ll manipulate the list.
but whenever the "key and item" doesnt match it makes "Found = 0", even
though i have an item that matches the key, but it overwrites the Found
variable to 0, in the next loop when "key ! = item", and hence all my
calculations are going wrong,
If i find a key in my list, some how the variable "Found " should be
1,till it comes out of the loop.

How can i do that.

Well, one way would be:

Found = False
for item in list:
if key == item:
Found = True
break

or maybe:

for item in list:
if key == item:
Found = True
break
else:
Found = False

but a better way would be:

Found = (key in list)


-tim
 
M

muttu2244

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

how to keep the Found = True for always if at all i find the item even
once.

thanks again in advance
yogi
 
M

Mike Meyer

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 <[email protected]> http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
 
L

Larry Bates

I'm having trouble determining what you want but
I think there are a couple of problems in your
code:

list2 = ['1','2','5',4]

did you mean

list2 = ['1','2','3','4']

Note missing quotes around the 4 and
5 instead of 3

If you want to know if list2 is found in list 1
it is as simple as:

if list2 in list1:
#
# Do something here
#

if you want to know if any member of list2 is
found in any list in list 1 then you can just do:

Found=max([y in x for y in list2 for x in list1])

works and you should have some fun picking this one-liner apart
<grin>.

-Larry Bates

Mike said:
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 <[email protected]> http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,274
Messages
2,571,372
Members
48,064
Latest member
alibsskemoSeAve

Latest Threads

Top