Créer une compresse fonction en Python?
J'ai besoin de créer une fonction appelée compresser qui compresse une chaîne en remplaçant les lettres répétées avec une lettre et un numéro. Ma fonction doit retourner la version abrégée de la chaîne. J'ai été en mesure de compter le premier caractère, mais pas les autres.
Ex:
>>> compress("ddaaaff")
'd2a3f2'
def compress(s):
count=0
for i in range(0,len(s)):
if s[i] == s[i-1]:
count += 1
c = s.count(s[i])
return str(s[i]) + str(c)
- Qu'avez-vous essayé le code sage? Cela ressemble assez paresseux, sans aucun effort mis en elle.
Vous devez vous connecter pour publier un commentaire.
Voici une courte python de la mise en œuvre d'une fonction de compression:
Voici quelques exemples:
isinstance(n, int )
, qui renvoie Vrai si n est un entier. Référence: stackoverflow.com/questions/3501382/...Version courte avec des générateurs:
(1) Regroupement de caractères avec
groupby(string)
(2) de Comptage de durée de groupe avec
sum(1 for _ in group)
(car aucunelen
sur de groupe est possible)(3) de Rejoindre le bon format
(4) Retrait de
1
caractères pour les éléments uniquesIl y a plusieurs raisons pourquoi cela ne fonctionne pas. Vous avez vraiment besoin d'essayer de débogage ce vous-même d'abord. Mettre dans un peu d'imprimer les relevés de tracer l'exécution. Par exemple:
Voici le résultat:
(1) de jeter les résultats de tous, mais la dernière lettre de la recherche.
(2) Vous permet de compter toutes les occurrences, et non pas simplement l'consécutifs.
(3) Vous lancez une chaîne de caractères d'une chaîne de caractères -- redondant.
Essayer de travailler à travers cet exemple, avec un crayon et du papier. Écrivez les étapes vous utilisation, en tant qu'être humain, pour analyser la chaîne. Travail sur la traduction de ceux de Python.
Juste une autre façon la plus simple de le faire:
Qui donne le résultat sous la forme requise, exemples:
De sortie : m1i1s2i1s2i1p2i1
d'impression(suite)