Create a compress function in Python?

后端 未结 19 1013
感动是毒
感动是毒 2021-01-05 03:37

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 vers

相关标签:
19条回答
  • 2021-01-05 04:12

    Here is something I wrote.

    def stringCompression(str1):
      counter=0
      prevChar = str1[0]
      str2=""
      charChanged = False
      loopCounter = 0
    
      for char in str1:
          if(char==prevChar):
              counter+=1
              charChanged = False
          else:
              str2 += prevChar + str(counter)
              counter=1
              prevChar = char
              if(loopCounter == len(str1) - 1):
                  str2 += prevChar + str(counter)
              charChanged = True
          loopCounter+=1
      if(not charChanged):
          str2+= prevChar + str(counter)
    
      return str2
    

    Not the best code I guess. But works well.

    a -> a1

    aaabbbccc -> a3b3c3

    0 讨论(0)
  • 2021-01-05 04:12

    I wanted to do it by partitioning the string. So aabbcc would become: ['aa', 'bb', 'cc']

    This is how I did it:

    def compression(string):
    
        # Creating a partitioned list
        alist = list(string)
        master = []
        n = len(alist)
    
        for i in range(n):
            if alist[i] == alist[i-1]:
                master[-1] += alist[i]
            else:
                master += alist[i]
    
    
        # Adding the partitions together in a new string
        newString = "" 
        for i in master:
            newString += i[0] + str(len(i))
    
        # If the newString is longer than the old string, return old string (you've not 
        # compressed it in length)
        if len(newString) > n:
            return string
        return newString
    
    
    
    string = 'aabbcc'
    print(compression(string))
    
    0 讨论(0)
  • 2021-01-05 04:17
    input = "mississippi"
    count = 1
    for i in range(1, len(input) + 1):
        if i == len(input):
            print(input[i - 1] + str(count), end="")
            break
        else:
            if input[i - 1] == input[i]:
                count += 1
        else:
                print(input[i - 1] + str(count), end="")
                count = 1
    

    Output : m1i1s2i1s2i1p2i1

    0 讨论(0)
  • 2021-01-05 04:17
    def compress(val):
        print(len(val))
        end=0
        count=1
        result=""
        for i in range(0,len(val)-1):
            #print(val[i],val[i+1])
            if val[i]==val[i+1]:
                count=count+1
                #print(count,val[i])
            elif val[i]!=val[i+1]:
                #print(end,i)
                result=result+val[end]+str(count)
                end=i+1
                count=1
        result=result+val[-1]+str(count)
        return result
    res=compress("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.")
    print(len(res))
    
    0 讨论(0)
  • 2021-01-05 04:19

    Below logic will work irrespective of

    1. Data structure
    2. Group By OR Set or any sort of compression logic
    3. Capital or non-capital characters
    4. Character repeat if not sequential

      def fstrComp_1(stng):
      sRes = ""
      cont = 1        
      for i in range(len(stng)):
      
       if not stng[i] in sRes:
          stng = stng.lower()
          n = stng.count(stng[i])
          if  n > 1: 
              cont = n
              sRes += stng[i] + str(cont)
          else:
              sRes += stng[i]
      
          print(sRes)
      
      fstrComp_1("aB*b?cC&")
      
    0 讨论(0)
  • 2021-01-05 04:20

    There are several reasons why this doesn't work. You really need to try debugging this yourself first. Put in a few print statements to trace the execution. For instance:

    def compress(s):
        count=0
    
        for i in range(0, len(s)):
            print "Checking character", i, s[i]
            if s[i] == s[i-1]:
                count += 1
            c = s.count(s[i])
            print "Found", s[i], c, "times"
    
        return str(s[i]) + str(c)
    
    print compress("ddaaaff")
    

    Here's the output:

    Checking character 0 d
    Found d 2 times
    Checking character 1 d
    Found d 2 times
    Checking character 2 a
    Found a 3 times
    Checking character 3 a
    Found a 3 times
    Checking character 4 a
    Found a 3 times
    Checking character 5 f
    Found f 2 times
    Checking character 6 f
    Found f 2 times
    f2
    
    Process finished with exit code 0
    

    (1) You throw away the results of all but the last letter's search. (2) You count all occurrences, not merely the consecutive ones. (3) You cast a string to a string -- redundant.

    Try working through this example with pencil and paper. Write down the steps you use, as a human being, to parse the string. Work on translating those to Python.

    0 讨论(0)
提交回复
热议问题