How to improve this code?

Diez B. Roggisch deets at nospam.web.de
Tue Sep 15 03:16:35 CEST 2009


Oltmans schrieb:
> Hello,
> 
> Is there someway I can improve the following code(pythonically)?
> (Copying from IDLE)
> match=[1,2,3,4,5]
> 
> def elementsPresent(aList):
> 	result=False
> 	if not aList:
> 		return False
> 	for e in aList:
> 		if e in match:
> 			result=True
> 		else:
> 			result = False
> 	return result
>  elementsPresent([6,7,8,9,5]) # should return True because 5 is
> present in list named match.
> 
> Is there somehow I can improve code in elementsPresent()? I'm not a
> very good programmer but I sense that idea of using a variable named
> 'result' inside elementsPresent() doesn't sound very good. Any ideas
> will be highly appreciated.

1) don't use a global variable for your function. Pass both parameters
2) make the lookup O(1) instead O(n) for you match by using a set
3) stop when something is found
4) Unless you want the code to be working with things that are not a 
list, but False, the first "if" is superflous


def elementsPresent(aList, match):
     match = set(match)
     for item in aList:
         if item in match:
             return True
     return False


It might actually be that turning both lists to sets & checking if these 
overlap is faster because it's in pure C.


Diez



More information about the Python-list mailing list