Comparación de subcadenas en python

Si tengo lista PhoneDirectory por ejemplo:

['John:009878788677' , 'Jefrey:67654654645' , 'Maria:8787677766'] 

Cuál es la función que se puede usar para comparar la Presencia de subcadena (Ej .: Joh) en cada entrada en la Lista.

He intentado usar

 if(PhoneDirectory.find(Joh) != -1) 

pero no funciona

amablemente ayuda ..

Si desea comprobar cada entrada por separado:

 for entry in PhoneDirectory: if 'John' in entry: ... 

Si solo quieres saber si alguna entrada satisface la condición y no te importa cuál:

 if any('John' in entry for entry in PhoneDirectory): ... 

Tenga en cuenta que any no hará ningún trabajo “desperdiciado”; se devolverá True tan pronto como encuentre una entrada que cumpla con la condición (si ninguna entrada cumple con la condición, debe verificar cada una de ellas para confirmar que, de Por supuesto, y luego devuelve False ).

 if any(entry.startswith('John:') in entry for entry in PhoneDirectory) 

Pero prepararía algo con dos elementos, ya que la lista de cadenas no es adecuada para la tarea:

 PhoneList = ['John:009878788677' , 'Jefrey:67654654645' , 'Maria:8787677766'] numbers = { a:b for item in PhoneList for a,_,b in (item.partition(':'),) } print numbers print "%s's number is %s." % ( 'John', numbers['John'] ) 

Como nadie lo ha recomendado aún, yo haría:

 all_johns = [p for p in PhoneDirectory if 'Joh' in p] 

Puede hacer una división en “:” y buscar las ocurrencias de lo que está buscando en el primer elemento de la matriz resultante.

 dir = ['John:009878788677' , 'Jefrey:67654654645' , 'Maria:8787677766']; for a in dir: values = a.split(":") if values[0] == "John": print("John's number is %s" % (values[1])) 

Si el rendimiento cuenta para esta tarea, use alguna implementación de SuffixTree . O simplemente hacer que cualquier motor DBMS haga el trabajo de indexación.