Search code examples
pythoncompression

Create a compress function in Python?


I need to create a function called compress that compresses a string by replacing any repeated letters with a letter and number. My function should return the shortened version of the string. I've been able to count the first character but not any others.

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)

Solution

  • Here is a short python implementation of a compression function:

    def compress(string):
    
        res = ""
    
        count = 1
    
        #Add in first character
        res += string[0]
    
        #Iterate through loop, skipping last one
        for i in range(len(string)-1):
            if(string[i] == string[i+1]):
                count+=1
            else:
                if(count > 1):
                    #Ignore if no repeats
                    res += str(count)
                res += string[i+1]
                count = 1
        #print last one
        if(count > 1):
            res += str(count)
        return res
    

    Here are a few examples:

    >>> compress("ddaaaff")
    'd2a3f2'
    >>> compress("daaaafffyy")
    'da4f3y2'
    >>> compress("mississippi")
    'mis2is2ip2i'