【问题标题】:Count the number of x occurrences of length n (it's not given)of sub-string in string [closed]计算字符串中子字符串长度为n(未给出)的x出现次数[关闭]
【发布时间】:2016-09-27 14:33:12
【问题描述】:

我无法获取字符串中具有 n 长度的子字符串的出现次数。例如,如果字符串是

CCCATGGTtaGGTaTGCCCGAGGT

而n是

3

输出必须是这样的:

'CCC' : 2, 'GGT' :3

输入是一个列表列表,所以我得到了列表的每个字符串,但我无法继续,输出是所有字符串的 dic

代码:

def get_all_n_repeats(n,sq_list):
    reps={}
    for i in sq_list:
        if not i:
            continue
        else:   
            for j in i:
                ........#Here the code I want to do#......                  
return reps

【问题讨论】:

  • 为什么是GGT 而不是GTt
  • 你至少需要展示你尝试过的东西。
  • 您的输出和输入没有意义。如果您将输入字符串拆分为三个字母字符串,您会得到 ['CCC', 'ATG', 'GTt', 'aGG', 'TaT', 'GCC', 'CGA', 'GGT'],所以我不知道您在输出中从哪里得到 GGT
  • 这个问题有什么不清楚的地方?这很有意义。
  • @BurhanKhalid 我认为他的候选人是['CCC', 'CCA', 'CAT', 'ATG', 'TGG', 'GGT', 'GTt', 'Tta', 'taG', 'aGG', 'GGT', 'GTa', 'TaT', 'aTG', 'TGC', 'GCC', 'CCC', 'CCG', 'CGA', 'GAG', 'AGG', 'GGT']

标签: python string substring


【解决方案1】:

一个非常明确的解决方案:

s = 'CCCATGGTtaGGTaTGCCCGAGGT'
n = 3
# All possible n-length strings
l = [s[i:i + n] for i in range(len(s) - (n - 1))]
# Count their distribution
d = {}
for e in l:
    d[e] = d.get(e, 0) + 1
print(d)

【讨论】:

    【解决方案2】:

    一个非常简单的解决方案:

    from collections import Counter
    
    st = "CCCATGGTtaGGTaTGCCCGAGGT"
    n = 3
    
    tokens = Counter(st[i:i+n] for i in range(len(st) - n + 1))
    print tokens.most_common(2)
    

    由您决定是否将其设为辅助函数。

    【讨论】:

      【解决方案3】:

      使用Counter

      from collections import Counter
      
      def count_occurrences(input, n):
          candidates = []
          for i, c in enumerate(st):
              try:
                  candidates.append('{}{}{}'.format(st[i], st[i+1], st[i+2]))
              except IndexError:
                  continue
      
          output = {}
          for k,v in Counter(candidates).items():
              if v > 1:
                  output[k] = v
      
      st = "CCCATGGTtaGGTaTGCCCGAGGT"
      n = 3
      
      count_occurrences(st, n)
      # {'GGT': 3, 'CCC': 2}
      

      【讨论】:

      • Counter(candidates).most_common()
      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多