- Acabo de analizar un archivo grande y creé una lista que contiene 42,000 cadenas/palabras. Quiero consultar [en contra de esta lista] para verificar si una palabra/cadena dada le pertenece. Así que mi pregunta es:La manera más eficiente para una búsqueda/búsqueda en una lista enorme (python)
¿Cuál es la forma más eficiente para dicha búsqueda?
Un primer enfoque consiste en ordenar la lista (list.sort()
) y luego sólo tiene que utilizar
>> if word in list: print 'word'
que es realmente trivial y estoy seguro de que hay una mejor manera de hacerlo. Mi objetivo es aplicar una búsqueda rápida que encuentre si una cadena dada está en esta lista o no. Si tiene alguna idea de otra estructura de datos, son bienvenidos. Sin embargo, quiero evitar por ahora estructuras de datos más sofisticadas como Tries, etc. Estoy interesado en escuchar ideas (o trucos) sobre búsquedas rápidas o cualquier otro método de biblioteca de Python que pueda hacer la búsqueda más rápido que el simple in
.
y también quiero saber el índice del elemento de búsqueda
Muchas gracias THC4k por su respuesta detallada. En realidad, estaba pensando en aplicar una búsqueda binaria, pero como veo, eso es lo que hace el módulo bisect de todos modos, así que me salvaste el tiempo :). Otra vez, gracias por tu ayuda. – user229269
@ user229269, ¡se adhirió a la parte incorrecta de la publicación! Es probable que desee un 'conjunto', no una' lista' en absoluto. –
@Mike Graham Sé lo que dices, pero me temo que podría tener problemas de memoria si uso conjuntos, teniendo en cuenta que mi lista es en realidad una lista de palabras de crecimiento rápido que terminará siendo tan grande como 100.000 cadenas y más – user229269