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'
?
Respuestas:
Si solo desea verificar la presencia de
abc
cualquier cadena en la lista, puede intentarSi realmente desea obtener todos los elementos que contienen
abc
, usefuente
if myitem in myarray:
filter(lambda element: 'abc' in element, some_list)
index()
método:try: return mylist.index(myitem); except ValueError: pass
Simplemente lanzando esto por ahí: si necesita hacer coincidir más de una cadena, por ejemplo ,
abc
ydef
puede combinar dos comprensiones de la siguiente manera:Salida:
fuente
{s for s in my_list for xs in matchers if xs in s}
(tenga en cuenta las llaves para crear un conjunto único). Puede ser más fácil de leer, pero podría ser más lento si la mayoría de loss
valores tienen una coincidencia, ya queany
se detendrá eficientemente en la primera coincidencia.Use
filter
para llegar a los elementos que tienenabc
.También puedes usar una lista de comprensión.
Por cierto, no use la palabra
list
como nombre de variable ya que ya se usa para ellist
tipo.fuente
Si solo necesita saber si 'abc' está en uno de los elementos, esta es la forma más corta:
fuente
Esta es una pregunta bastante antigua, pero ofrezco esta respuesta porque las respuestas anteriores no hacen frente a elementos en la lista que no son cadenas (o algún tipo de objeto iterable). Dichos elementos causarían que toda la comprensión de la lista falle con una excepción.
Para tratar con gracia dichos elementos en la lista omitiendo los elementos no iterables, utilice lo siguiente:
entonces, con tal lista:
aún obtendrá los elementos coincidentes (
['abc-123', 'abc-456']
)La prueba de iterable puede no ser la mejor. Lo tengo desde aquí: en Python, ¿cómo puedo determinar si un objeto es iterable?
fuente
[el for el in lst if el and (st in el)]
tendría más sentido en el ejemplo dado?my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
no hay necesidad de complicarlo demasiado.fuente
fuente
if 'abc' in item
que usarloitem.find('abc') == -1
.fuente
Utilice el
__contains__()
método de la clase de cadena Pythons .:fuente
Soy nuevo en Python. Obtuve el siguiente código funcionando y lo hice fácil de entender:
fuente
fuente
fuente
import re
mylist=['abc','def','ghi','abcff']
my_list_string=''.join(mylist)
string_to_find="abc"
res=re.findall(string_to_find,my_list_string)
print(res)
Hice una búsqueda, que requiere que ingrese un cierto valor, luego buscará un valor de la lista que contiene su entrada:
Intenta buscar 'abc'.
fuente
fuente
Necesitaba los índices de la lista que corresponden a una coincidencia de la siguiente manera:
salida
fuente
Pregunta: Proporcione la información de abc
fuente
Que yo sepa, una declaración 'para' siempre consumirá tiempo.
Cuando la longitud de la lista aumenta, el tiempo de ejecución también aumentará.
Creo que buscar una subcadena en una cadena con la instrucción 'es' es un poco más rápido.
Pero, estoy de acuerdo en que la
any
declaración es más legible.fuente