Ici, je veux supprimer toutes les voyelles qui se répètent consécutivement. Mais il affiche l'erreur comme "liste hors index".
J'ai donc essayé de casser si le dernier élément de la liste est atteint, mais ne fonctionne toujours pas.
Voici le code que j'ai essayé: -
a=[] b=str(input("enter the string")) a=b.split(',') c=['a','e','i','o','u'] for i in c: for j in range(0,len(a)): if (a[j+1] == a[len(a)]) is True: break; elif ((a[j] == a[j+1]) & (a[j+1] == i)) is True: del[j] e.join(a) print(e)
Veuillez me montrer comment résoudre ce problème, ou tout autre problème le cas échéant. p >
6 Réponses :
Vous obtenez une liste hors erreur d'index car vous indexez à une valeur qui ne figure pas dans a
if a[j+1] == a[len(a) - 1]:
a [len (a)] n'existe pas, les tableaux sont indexés à zéro donc ils commencent à 0. Un tableau avec 5 éléments a l'index 0,1,2,3,4
la ligne doit être:
XXX
Aussi "est vrai" est redondant, donc affiné davantage:
if (a[j+1] == a[len(a) - 1]) is True:
Est également del [j]
une erreur? devrait-il être del a [j]
?
Si tel est le cas, le programme rencontrera d'autres erreurs lorsque vous itérez sur toute la taille d'origine du tableau, mais supprimez des valeurs au cours de cette itération, de sorte qu'il recherchera les éléments qui n'existent plus.
Que diriez-vous de maintenir une pile pour les voyelles consécutives? chaque fois que vous voyez une chaîne non voyelle, réinitialisez la liste de la pile et lorsque vous voyez des voyelles mais ne sont pas consécutives, vous ajoutez simplement à la liste finale
stack=[] new_list=[] vowel=['a','i','o','u','e'] for i in your_string: # replace your string with actual string if i not in vowel: if len(stack) == 1: new_list.append(stack[0]) new_list.append(i) stack = [] else: stack.append(i) if len(stack) == 1: new_list.append(stack[0])
Le premier détail est le suivant: if (a [j + 1] == a [len (a)]) est True:
d'après ce que j'ai compris, c'est casser le code quand c'est nécessaire . Mais c'est complètement inutile. Au lieu de cela, vous devriez fixer le nombre d'itérations au début, qui devrait être pour j dans la plage (0, len (a) -1):
Un autre problème est que vous n'itérez pas vraiment à travers les lettres, juste chaque phrase séparée par une virgule. Si vous mettez "Hello, World", vous ne vérifiez pas les lettres, vous cochez "Hello" et "World". Vous pourriez aussi bien supprimer b et laisser a juste être l'entrée brute.
Puisque a serait alors une chaîne, pour effacer la i-ième lettre d'une chaîne, vous pouvez utiliser la fonction ci-dessous. P >
def remove_jth(word, j): word = word[:j] + word[j+1:]
Enfin, puisque vous utilisez range, il construira une "liste" qui a la taille len (a) lorsque vous démarrez le for, mais lorsque vous supprimez les voyelles, la longueur d'un devient plus courte et la portée que vous aviez au début sera trop grande. Si vous corrigez toutes ces choses, vous devriez bien faire les choses
Vous pouvez le faire de cette façon:
a=[] b=str("a,a,a,b,e,e,e,c,x,d") a=b.split(',') c=['a','e','i','o','u'] j = 0 for i in c: while j < len(a)-1: if a[j] == a[j+1] and a[j] == i: del a[j] else: j = j+1 j=0
Utilisez une boucle while
pour parcourir la liste et supprimer les doublons consécutifs. Ensuite, réinitialisez la boucle while à zéro et parcourez à nouveau la liste.
L'utilisation d'une boucle for
ne fonctionnera pas si vous supprimez des éléments de la liste utilisée pour répéter.
b = str ("a, a, a, b, e, e, e, c, x, d")
a été juste utilisé pour tester le code.
Pour imprimer les résultats, vous pouvez simplement faire print (a)
cela imprimera la liste.
J'ai utilisé ceci Message de Stack Overflow comme référence .
Je l'ai modifié pour vous convenir:
result=original.replace('a','').replace('e',''),replace('i','').replace('o','').replace('u','')
original
est votre chaîne d'entrée et result
est votre chaîne de sortie. p >
t=input() st="" vow=['a','e','i','o','u'] st+=t[0] for i in range(1,len(t)): if(t[i].lower() in vow): if(t[i-1].lower() not in vow and i-1>=0): st+=t[i] else: st+=t[i] print(st)
Bien que cet extrait de code puisse résoudre la question, y compris une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
Bien que cela puisse répondre à la question, il a été signalé pour examen. Les réponses sans explication sont souvent considérées comme de mauvaise qualité. Veuillez expliquer pourquoi c'est la bonne réponse.
Salut. Bienvenue. Vous ne devriez pas simplement dire "cela ne fonctionnera pas" et vous devriez inclure toutes les entrées nécessaires. Fournissez vos contributions, décrivez ce que vous attendez de vous, puis décrivez en quoi ce qui se passe est différent.
Voir également stackoverflow.com/help/minimal-reproducible-example
Qu'est-ce que e? Essayez d'inclure toutes les informations requises si vous souhaitez une solution complète, sinon supprimez tout ce qui n'est pas nécessaire à votre problème.