2017-10-13 8 views
1

J'ai fait un double pour une boucle qui prend d'abord un mot d'une liste de radicaux, puis itère dans la même liste en recherchant des mots similaires (avec un ratio de 70%). Ce dont j'ai besoin, c'est que chaque fois que la première boucle prend un mot de la liste, elle crée une nouvelle liste contenant le mot + ceux qui ont été choisis par la deuxième boucle qui sont similaires.Comment puis-je créer de nouvelles listes dans une boucle et les nommer afin que je puisse les remplir avec des éléments d'une autre liste en utilisant Python?

J'ai beaucoup essayé avec la compréhension des listes, mais je n'arrive pas à comprendre comment placer les mots de la deuxième boucle dans la nouvelle liste. Je pensais que cela pourrait fonctionner si chaque liste créée avait un index (x). Voici mon code:

x = 0 

result = [[] for x in range(len(radicals))] 
for i in range(0, len(radicals)) : 
    for j in range(1, len(radicals)) : 
     result[x].append(words[i]) 
     result[x].append(words[j])  
print(result[0]) 

Le résultat je suis arrivé est le nombre de mots radicaux * le nombre de la liste ...

La liste des mots:

words = ["flore", "fleur", "fleuriste", "remaniement", "remanier", "manier", "maniable", "désaimer", "aimer", "aimant", "mêler", "emmêler", "désemmêler"] 

Le résultat après impression (radicaux):

['flore', 'fleur', 'fleur', 'manie', 'mani', 'mani', 'mani', 'aim', 'aim', 'aim', 'mêl', 'mêl', 'emmêl'] 

J'essaie de mettre des mots et non des radicaux dans les nouvelles listes , J'ai seulement besoin de radicaux pour le processus d'appariement.

je dois avoir quelque chose comme:

['flore', 'fleur', 'fleuriste'] 
['manier', 'remanier', 'remaniement'] 
['désaimer', 'aimer', 'aimant'] 
['mêler', 'emmêler', 'désemmêler'] 

Je pourrais vraiment utiliser votre aide. Merci beaucoup !

+1

vous vous rendez compte que vous utilisez le même nom de variable pour les deux vos variables et vos itérations de la boucle 'for'? la seule variable réellement utilisée est 'x' – Mangohero1

+0

Pourriez-vous fournir un exemple de' radicaux 'et le résultat attendu? –

+0

@KirillErmolov Je viens d'éditer ma question :) –

Répondre

0

Je pense que vous avez besoin quelque chose comme ça

def is_match(radical_1, radical_2): 
    # return true if two radical are the same. 

# ...  

n = len(radicals) 
result = [] 
used_js = [] 
for i in range(n): 
    if i in used_js: 
     continue 
    matches = [words[i]] 
    js = (x for x in range(n) if x != i and x not in used_js) 
    for j in js: 
     if is_match(radicals[i], radicals[j]): 
      matches.append(words[j]) 
      used_js.append(j) 
    result.append(matches) 
+0

Merci beaucoup Kirill Ermolov, ça marche parfaitement! –