Encontrar una subcadena dentro de una lista en Python

Fondo:

Ejemplo de lista: mylist = ['abc123', 'def456', 'ghi789']

Quiero recuperar un elemento si hay una coincidencia para una subcadena, como abc

Código:

 sub = 'abc' print any(sub in mystring for mystring in mylist) 

lo anterior se imprime True si alguno de los elementos de la lista contiene el patrón.

Me gustaría imprimir el elemento que coincida con la subcadena. Así que si estoy marcando 'abc' solo quiero imprimir 'abc123' de la lista.

 print [s for s in list if sub in s] 

Si los quieres separados por nuevas líneas:

 print "\n".join(s for s in list if sub in s) 

Ejemplo completo, con insensibilidad a los casos:

 mylist = ['abc123', 'def456', 'ghi789', 'ABC987', 'aBc654'] sub = 'abc' print "\n".join(s for s in mylist if sub.lower() in s.lower()) 

Todas las respuestas funcionan pero siempre recorren toda la lista. Si entiendo tu pregunta, solo necesitas el primer partido. Por lo tanto, no tiene que considerar el rest de la lista si encuentra su primera coincidencia:

 mylist = ['abc123', 'def456', 'ghi789'] sub = 'abc' next((s for s in mylist if sub in s), None) # returns 'abc123' 

Si la coincidencia está al final de la lista o para listas muy pequeñas, no hay diferencia, pero considere este ejemplo:

 import timeit mylist = ['abc123'] + ['xyz123']*1000 sub = 'abc' timeit.timeit('[s for s in mylist if sub in s]', setup='from __main__ import mylist, sub', number=100000) # for me 7.949463844299316 with Python 2.7, 8.568840944994008 with Python 3.4 timeit.timeit('next((s for s in mylist if sub in s), None)', setup='from __main__ import mylist, sub', number=100000) # for me 0.12696599960327148 with Python 2.7, 0.09955992100003641 with Python 3.4 

Utilice un bucle simple for :

 seq = ['abc123', 'def456', 'ghi789'] sub = 'abc' for text in seq: if sub in text: print(text) 

rendimientos

 abc123 

Esto imprime todos los elementos que contienen sub:

 for s in filter (lambda x: sub in x, list): print (s) 

Solo usaría un regex simple, puedes hacer algo como esto

 import re old_list = ['abc123', 'def456', 'ghi789'] new_list = [x for x in old_list if re.search('abc', x)] for item in new_list: print item