J'essayais d'imprimer un caractère dupliqué présent dans une chaîne.
Il y a une chaîne a = "ctintcdctccc". J'ai écrit une boucle while imbriquée pour vérifier si le premier index de la chaîne 'a' est égal à le deuxième indice de «a». J'essayais de vérifier en prenant deux paramètres i et j en gardant la valeur de i initialement égale à 0 mais la valeur de j boucle de 0 à la longueur de la chaîne-1 afin de comparer à chaque fois chaque index de la chaîne avec le prochain index de la chaîne et imprime la valeur dupliquée.
a="ctintcdctccc"
i=0
j=0
char=""
while i<len(a)-1:
while j<len(a)-1:
if a[i]==a[j+1]:
char=char+a[i]
j+=1
i+=1
print(char)
La sortie que j'obtiens est char = ccccc mais n'imprime pas d'autre chaîne dupliquée 't' qui est également une valeur dupliquée.
3 Réponses :
La raison pour laquelle votre algorithme ne fonctionne pas est que vous ne réinitialisez jamais la valeur de j après la première itération. Ainsi, ce que vous vouliez faire est certainement:
from collections import Counter
a="ctintcdctccc"
b = Counter(a) # b = {'c': 6, 't': 3, 'i': 1, 'n': 1, 'd': 1}
Ce qui ne parvient toujours pas à faire ce que vous vouliez.
Une solution plus simple (brouillon) est:
char = {}
for i in a:
if i in char:
char[i] += 1
else:
char[i] = 1
print(char) # char = {'c': 6, 't': 3, 'i': 1, 'n': 1, 'd': 1}
Alternativement
Pour ce faire, vous pouvez utiliser Counter :
a = "ctintcdctccc"
i = 0
j = 0
char = ""
while i < len(a)-1:
j = i+1 # reset j
while j < len(a)-1:
if a[i] == a[j+1]:
char = char+a[i]
j += 1
i += 1
print(char) # 'cccctttccccc'
Comment obtenir le résultat sans implémenter Counter et pouvez-vous expliquer ce qui ne va pas dans mon code?
Je ne comprends pas. Même si je n'ai pas initialisé j = i + 1, la valeur de j était incrémentée de 1 par (j + = 1 instruction) rt?
@ user11582315 Ceci n'est vrai que pour la première itération (i = 0), quand i atteint la valeur suivante, la valeur j est 10 et les instructions après tandis que j
En gros, votre j n’est pas réinitialisé. Ainsi, vos boucles ne sont exécutées qu'une seule fois. Réinitialisez j comme j = i avant que la boucle interne ne démarre. De plus, vous pouvez vérifier si l'élément est déjà présent dans la chaîne char .
while i<len(a)-1:
j = i
while j<len(a)-1:
if a[i]==a[j+1]:
if(a[i] not in char):
char=char+a[i]
j+=1
i+=1
Vous pouvez le changer en une liste, puis utiliser count () et remove():
a="ctintcdctccc"
a = list(a)
i = 0
dups = ''
while a:
if a.count(a[i])>1:
dups += a[i]*a.count(a[i])
temp = a[i]
for o in range(a.count(a[i])):
a.remove(temp)
print(dups)
De cette façon, vous n'a pas besoin d'importer quoi que ce soit, et cela fonctionnera sur n'importe quel ordinateur avec python.
Alternativement, vous pouvez réparer votre code pour réinitialiser j au début de chaque itération de votre première boucle while