2017-10-15 2 views
1

Bon, s'il vous plaît pardonnez-moi pour ma question, il est probablement pas demandé de la meilleure façon possible !!Détermination des ensembles de sous-chaînes dans une liste de chaînes

J'ai un ensemble de 56 entrées dans un dictionnaire. Les clés indiquent les combinaisons de fonctionnalités représentées par les chaînes dans les dictionnaires. Je subdivise le dictionnaire de chaînes en ensembles basés sur des caractéristiques et en mettant les valeurs dans des listes. Mon code fonctionne jusqu'à ce point.

J'ai maintenant des difficultés à déterminer comment comparer chacune des chaînes de la liste pour déterminer la chaîne partagée maximale. Alors mes listes ressemblent:

[Ngali, Ngali, NGALINA, NGALINA, ngina, ngina, nginana]

So 'ng' est ce que je suis après dans ce cas. Jusqu'ici, j'ai seulement pu trouver des références à la recherche de distances de corde avec des choses comme Levinshtein et fuzz.

Y a-t-il des façons «propres» de coder ceci ou suis-je destiné à écrire des boucles imbriquées imbriquées dans des boucles pour travailler à travers toutes les combinaisons possibles?

J'utilise Python 3.

+0

Il semble que vous implémentez une variation du problème Longest Common Substring (avec votre sous-chaîne à l'avant il semble). Peut-être que cela serait utile? https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_3 – Raizuri

+1

J'ai donc lu cela plus tôt et corrigez-moi si je me trompe, mais cet extrait de code ne trouve que la plus longue sous-chaîne commune si elle commence à le début du mot, dans mon cas, il peut être n'importe où dans le mot. Je devine que je vais devoir créer une autre boucle pour que cela prenne en compte un point de départ glissant ... – Ant

Répondre

-1
from os.path import commonprefix 
l = ['ngali','ngali','ngalina','ngalina','ngina','ngina','nginana'] 
commonprefix(l) 
+0

Je ne cherche pas seulement des préfixes communs, je dois être capable de trouver la plus longue chaîne commune indépendamment d'où il est dans le mot. Dans un autre ensemble, je devrai regarder des mots comme ['ngalina', 'nginana'] et trouver le 'na', dans d'autres cas la chaîne sera au centre du mot. – Ant

+0

@Ant tu voulais 'ng'; au moins avoir la courtoisie de ne pas downvote – skrubber

+0

Je n'ai pas downvote, je ne sais pas qui downvoted. Au moins, je ne pense pas que je l'ai fait, je suis nouveau à cela, alors si je l'ai fait, je m'en excuse. – Ant