2016-07-19 6 views
-3

私の文は奇妙に見えますが、私は印刷から値-1防ぐ方法を考えることができない場合:-1を印刷しないように条件文を書き直すにはどうすればよいですか?

### script counts the number of times that a key string appears in target string 

from string import * 

def countSubStringMatch(target,key): 
    value = target.find(key, 0) 
    print value 

    while value > -1: 
     value = value + 1 
     value = target.find(key, value) 

     if value != -1: 
      print value 
     else: 
      break 

countSubStringMatch("atgacatgcacaagtatgcat","atg") 

これは私の出力である:

0 
5 
15 
+0

あなたは方法がほぼ確実にこの問題に取り組む最善の方法ではありませんね。しかし、私は関数定義内のプリントをリターンで置き換えるべきだと思います。編集で呼び出す関数の出力を表示できますか? –

答えて

2

あなたが最初の印刷を削除することができますステートメントの代わりに、最後ではなく、ループの本文の先頭に値を出力します。ところで

def countSubStringMatch(target,key): 
    value = target.find(key, 0) 

    while value > -1: 
     print value 

     value = value + 1 
     value = target.find(key, value) 

、あなただけの一致の数ではなく、各試合の開始のインデックスをしたい場合、あなたはcountを使用することができますが:

>>> count("atgacatgcacaagtatgcat","atg") 
# 3 
+0

それは良い方法:) :)ありがとう! – scsi

1
def countSubStringMatch(target,key): 
    res = set([ data.find('atg',i) for i in range(len(data)) ]) 
    res.remove(-1) 
    print res 

countSubStringMatch("atgacatgcacaagtatgcat","atg") 

set([0, 5, 15]) 
関連する問題