0

文字列シーケンスを分析できるプログラムを作成しようとしています。現在、私のプログラムは文字ごとにシーケンスを調べることができますが、変数になる文字列の終わりをきれいに認識させる方法がわかりません。

str_exp="ABCDAABKLYWAKAT"

n=0
x=5

while n<=10:

  window=str_exp[n:x]
  print window,
  n+=1
  x+=1

  countA=window.count('A') 
  print countA

これにより、次のように出力されます。

ABCDA 2
BCDAA 2
CDAAB 2
DAABK 2
AABKL 2
ABKLY 1
BKLYW 0
KLYWA 1
LYWAK 1
YWAKA 2
WAKAT 2
4

3 に答える 3

1

whileループの条件を に基づいて変更するだけlen(str_exp)で、文字列の長さが検出されます。基本的な部分はすべて揃っているので、算術計算はあなたに任せます。

于 2012-12-03T19:58:55.270 に答える
0

を使用して、文字列 (または他の多くの Python 型) の長さを取得できますlen(s)。したがって、これを行う 1 つの方法は、次の行を置き換えることです。

while n<=10:

これとともに:

while n<=len(str_exp) - 5:

n = 0 … while n<=bound: … n+=1ただし、通常、Pythonのようなループは必要ありません。3 行すべてをfor n in range(bound):. とは、 「このループを、次に、…、そして で実行する」range(5)という意味[0, 1, 2, 3, 4]であり、まさにその意味です。そう:for n in [0, 1, 2, 3, 4]:n=0n=1n=4n = 0 … while n<=4: … n+=1

for n in range(len(str_exp)-5):

ただし、いずれにせよ、それを台無しにして、最後のウィンドウを見逃すか、行き過ぎて通り過ぎるかのいずれかで、オフバイワンエラーが発生するのは非常に簡単です。(幸いなことに、Python では、たとえば segfault でクラッシュするのではなく、ウィンドウを 5 文字ではなく 4 文字で表示するだけでよいことを意味します)。それは必要ありません。

前向きよりも後ろ向きに考える方が簡単な場合があります。0からへ…に行きたいことを確認するには少し考えますが、スライスを逆方向に定義すると、 からから にlen(str_exp) - 5行くことができることは明らかです。同じことが当てはまる場合は、次のように書き換えることができます。5len(str_exp)

for n in range(5, len(str_exp)):
    window=str_exp[n-5:n]
    …

または、どちらも明らかでない場合は、別の方法で定義できます。たとえば、ウィンドウの長さが 5 文字でなくなるまで進みたい場合は、次のようにします。

for n in range(len(str_exp)):
    window=str_exp[n:x]
    if len(window) < 5:
        break
    …

これを再考するさらに根本的な方法があります。例を挙げると、汎用window関数を作成すると、ループは次のようになります。

for window in iterwindow(str_exp, 5):
    …

iterwindowおそらく、まだこの関数を書くことも読むこともできないでしょう。次のようになります。

def window(iterable, windowlength):
  window = ''
  for i in iter(iterable):
    if len(window) == windowlength:
      window = window[1:]
    window = window + i
    if len(window) == windowlength:
      yield window

しかし、他の誰かがそれを (標準ライブラリ、または PyPI で見つけることができるモジュールで) 作成した場合は、それを使用できます。

于 2012-12-03T19:58:02.773 に答える
0

これを行う:

windowlen = 5
for end in range(windowlen,len(str_exp)):
    print str_exp[end-windowlen:end]

Range は数値のリストを作成するだけです。最後の番号を の最後のインデックスにしstr_exp、最後を参照してウィンドウの開始を作成することで、最後からはみ出さないようにします。

rangePython シェルに式を入力して、その動作を確認します。

于 2012-12-03T19:58:39.193 に答える