"Jorge Vargas" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Hi > > I need to check if an object is in a list AND keep a reference to the > object I have done it this way but is there a better one? > >>>> def inplusplus(value,listObj): > ... for i in listObj: > ... if i is value: > ... return value > ... return False > ... >>>> l = [1,2,3,4] >>>> print inplusplus(2,l) > 2 >>>> print inplusplus(9,l) > False >>>> print inplusplus(1,l) > 1 >>>> l.append(0) >>>> print inplusplus(0,l) > 0
Just a couple of quick comments: 1. "if i is value" will check for identity, not equality. Your example with small integers relies on a nonportable CPython implementation of using cached objects. Check out this behavior: >>> def inplusplus(value,listObj): ... for i in listObj: ... if i is value: ... return value ... return False ... >>> a = 5 >>> lst = [ 1,3,5,7 ] >>> inplusplus(5,lst) 5 >>> inplusplus(a,lst) 5 >>> lst.append( 123456789 ) >>> inplusplus( 123456789,lst) False Instead of this loopy "is" test, just use "in": >>> def inplusplus(value,listObj): ... if value in listObj: return value ... return False ... >>> inplusplus( 123456789,lst) 123456789 2. What happens if "False" is in the list? How would you know? -- Paul -- http://mail.python.org/mailman/listinfo/python-list