Compruebe si un elemento de la lista de Python contiene una cadena dentro de otra cadena

Tengo una lista:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] 

y desea buscar elementos que contengan la cadena 'abc' . ¿Cómo puedo hacer eso?

 if 'abc' in my_list: 

comprobaría si 'abc' existe en la lista pero es parte de 'abc-123' y 'abc-456' , 'abc' no existe por sí solo. Entonces, ¿cómo puedo obtener todos los artículos que contienen 'abc' ?

Si solo desea comprobar la presencia de abc en cualquier cadena de la lista, puede intentar

 some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] if any("abc" in s for s in some_list): # whatever 

Si realmente desea obtener todos los elementos que contienen abc , utilice

 matching = [s for s in some_list if "abc" in s] 

Usa el filter para llegar a los elementos que tienen abc .

 >>> lst = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] >>> print filter(lambda x: 'abc' in x, lst) ['abc-123', 'abc-456'] 

También puede utilizar una lista de comprensión.

 >>> [x for x in lst if 'abc' in x] 

Por cierto, no use la list palabras como un nombre de variable ya que ya se usa para el tipo de list .

Simplemente deseche esto: si tiene que coincidir con más de una cadena, por ejemplo, abc y def , puede combinar las dos listas de comprensión de la siguiente manera:

 matchers = ['abc','def'] matching = [s for s in my_list if any(xs in s for xs in matchers)] 

Salida:

 ['abc-123', 'def-456', 'abc-456'] 

Este es el camino más corto:

 if 'abc' in str(my_list): 

Esta es una pregunta bastante antigua, pero ofrezco esta respuesta porque las respuestas anteriores no tratan con los elementos de la lista que no son cadenas (o algún tipo de objeto iterable). Tales elementos harían que la comprensión de la lista completa falle con una excepción.

Para lidiar con gracia con dichos elementos en la lista omitiendo los elementos no iterables, use lo siguiente:

 [el for el in lst if isinstance(el, collections.Iterable) and (st in el)] 

entonces, con tal lista:

 lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123] st = 'abc' 

todavía obtendrá los elementos coincidentes ( ['abc-123', 'abc-456'] )

La prueba para iterable puede no ser la mejor. Lo obtuve de aquí: en Python, ¿cómo puedo determinar si un objeto es iterable?

 for item in my_list: if item.find("abc") != -1: print item 
 x = 'aaa' L = ['aaa-12', 'bbbaaa', 'cccaa'] res = [y for y in L if x in y] 
 any('abc' in item for item in mylist) 

Soy nuevo en Python. Conseguí el código de abajo trabajando y fácil de entender

 my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] for str in my_list: if 'abc' in str: print(str) 

Use __contains__() Método de cadena.

  a = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] for i in a: if i.__contains__("abc") : print(i, " is containing") 
 my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] for item in my_list: if (item.find('abc')) != -1: print ('Found at ', item) 
 mylist=['abc','def','ghi','abc'] pattern=re.compile(r'abc') pattern.findall(mylist) 

Hice una búsqueda, que requiere que ingrese un cierto valor, luego buscará un valor de la lista que contenga su entrada:

 my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456' ] imp = raw_input('Search item: ') for items in my_list: val = items if any(imp in val for items in my_list): print(items) 

Intenta buscar ‘abc’.

Por lo que sé, una statement ‘para’ siempre consumirá tiempo.

Cuando la longitud de la lista está creciendo, el tiempo de ejecución también boostá.

Creo que buscar un subcadena en una cadena con la statement ‘is’ es un poco más rápido.

 In [1]: t = ["abc_%s" % number for number in range(10000)] In [2]: %timeit any("9999" in string for string in t) 1000 loops, best of 3: 420 µs per loop In [3]: %timeit "9999" in ",".join(t) 10000 loops, best of 3: 103 µs per loop 

Pero, estoy de acuerdo en que any statement es más legible.

Pregunta: Dar las informaciones de abc.

  a = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] aa = [ string for string in a if "abc" in string] print(aa) Output => ['abc-123', 'abc-456']