【问题标题】:Getting output as character and it's occurrence in the string将输出作为字符并出现在字符串中
【发布时间】:2022-01-24 04:50:05
【问题描述】:

我给的输入是这样的

Input- abccdddeffg

我想要的输出是字符和它的出现次数

Output- a1b1c2d3e1f2g1

我的代码

uni = []
string = 'abcccdd'
for i in range(0, len(string)):
    for j in range(i+1, len(string)):
        if (string[i] == string[j]):
            uni.append(string[i])
            
for oc in uni:
    cou= uni.count(oc)
    print(oc,cou)

提前致谢

【问题讨论】:

  • 你做了什么?首先显示您的代码。
  • ''.join([f'{k}{v}' for k,v in Counter(s).items()])

标签: python


【解决方案1】:

以最简单的方式:

inp = 'abccdddeffg'

l=[]
o=""
for i in inp:
    if i in l:
        pass
    else:
        l.append(i)
        o+="{}{}".format(i,inp.count(i))
print(o)

输出

'a1b1c2d3e1f2g1'

【讨论】:

    【解决方案2】:

    假设您的输入字符串已排序并且至少有一个字母,您可以做一个简单的循环来处理它:

    if len(string) == 1:
        # print out the only string and 1 as its occurences
        print(string + '1')
    else:
        # initialize first string, its counter, and our result string
        prev = string[0]
        counter = 1
        result = ''
        
        # loop over each letter
        for letter in string[1:]:
            curr = letter
            
            # if current letter is different from previous letter,
            # concat the result and refresh our counter
            # else just increase the counter
            if curr != prev:
                result = result + prev + str(counter)
                counter = 1
            else:
                counter = counter + 1
            prev = curr
            
        # don't forget to handle the last case
        result = result + prev + str(counter)
        print(result)
    

    【讨论】:

      【解决方案3】:

      您可以使用集合中的计数器来获取列表中每个字符的计数。然后使用 forloop 生成结果并使用 set 确保结果中没有重复字符。

      from collections import Counter    
      string = "abccdddeffg"
      counts = Counter(string)
      sets = set()
      result = []
      
      for s in string:
          if s not in sets:
              result.append(f"{s}{counts[s]}")
          sets.add(s)
      
      result = ''.join(result)
      print(result)
      

      【讨论】:

        【解决方案4】:

        这是一个更简单的方法:

        def freq_string(string):
            output, buffer = "", ""
            for letter in string:
                if buffer != letter:
                    buffer = letter
                    output += f"{letter}{string.count(letter)}"
            return output
        

        注意:这确实假设相同的字符是连续的,而不是在字符串周围随机分布。

        【讨论】:

          【解决方案5】:

          首先,您的输出包含错误,1 旁边应该有 e,因为它在第一次出现的字符中。

          清除后,这就是你需要的:

          import collections
          
          s = "abccdddeffg"  # your string
          
          a = dict((letter,s.count(letter)) for letter in set(s))
          a = collections.OrderedDict(sorted(a.items()))
          
          answer = "" # to store the result
          
          for i,j in zip(a.keys(),a.values()):
              answer+= i + str(j)
          
          print(answer)
          

          answer 将返回:

          'a1b1c2d3e1f2g1'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-08
            • 2022-01-22
            • 1970-01-01
            • 1970-01-01
            • 2015-04-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多