2

長いバイナリ文字列でバイナリ5マーの数を見つけようとしています。つまり、次のような文字列が与えられた場合:seq = '000111100101101'、各5マーが出現する回数をカウントしたいと思います。32回の反復すべてのリストを簡単に生成しました。

import re
from itertools import product  
combo = [ ''.join(x) for x in product('01', repeat=5) ]

私の問題は、重複する各組み合わせの発生をカウントすることです。(つまり、長さ5:0:4、1:5、2:6、3:7の重複するウィンドウをチェックインしたい...(シーケンスの長さの合計-4つのウィンドウ)。方法がわかりません。したがって、重複するウィンドウをカウントする方法で(combo [i] = seq.count(i)は機能しないようです)。

ありがとう!

与えられたシーケンスに必要な出力の例:

seq: '11111101'
Combos: (11111 :2 ,  11101 :1 , 11110 :1)
4

1 に答える 1

1

defaultdict:を使用した単純なPython実装

from collections import defaultdict
def C(s):
  d = defaultdict(int)
  for i in xrange(len(s)-4):
    d[s[i:i+5]] += 1
  return d

 C('010100101010101001111010000000001')
于 2012-09-05T18:09:20.120 に答える