- J'ai juste analysé un gros fichier et j'ai créé une liste contenant 42.000 chaînes/mots. Je veux interroger [contre cette liste] pour vérifier si un mot/une chaîne lui appartient. Donc, ma question est:Le moyen le plus efficace pour une recherche/recherche dans une liste énorme (python)
Quel est le moyen le plus efficace pour une telle recherche?
Une première approche consiste à trier la liste (list.sort()
), puis il suffit d'utiliser
>> if word in list: print 'word'
qui est vraiment trivial et je suis sûr qu'il ya une meilleure façon de le faire. Mon but est d'appliquer une recherche rapide qui trouve si une chaîne donnée est dans cette liste ou non. Si vous avez des idées d'une autre structure de données, elles sont les bienvenues. Pourtant, je veux éviter pour l'instant des structures de données plus sophistiquées comme Tries etc. Je suis intéressé à entendre des idées (ou des astuces) sur les recherches rapides ou toute autre méthode de la bibliothèque python qui pourrait faire la recherche plus rapidement que la simple in
.
Et aussi je veux connaître l'index de l'élément de recherche
Merci beaucoup THC4k pour votre réponse détaillée. En fait, je pensais à appliquer une recherche binaire moi-même mais comme je vois c'est ce que fait le module bisect de toute façon, alors vous avez économisé mon temps :). Encore une fois, merci pour votre aide. – user229269
@ user229269, vous avez accroché à la mauvaise partie de la poste! Vous voulez probablement un 'set', pas une' liste' du tout. –
@Mike Graham Je sais ce que vous dites, mais j'ai peur de rencontrer des problèmes de mémoire si j'utilise des ensembles, étant donné que ma liste est en fait une liste de mots qui va grossir jusqu'à 100.000 chaînes et plus – user229269