0
def countSubStringMatchRecursive(target,key):
    """Counts how many times key is in string(string,key)"""
    x=find(target,key)
    print x
    return x!=-1 and countSubStringMatchRecursive(target[x+1:],key)+1 

したがって、このプログラムは特定の文字列を受け取り、その中に部分文字列が表示される回数をカウントします。したがって、ターゲット「バナナ」とキー「an」が与えられると、関数は2を吐き出します。

私はそれがこれをどのように行うかについて少し混乱しています。x!= 1は、プログラムが1に等しくないxのみを返すようにしますか?countSubStringMatchRecursive...の最後の+1が何らかの形でカウントされていると思います。

4

4 に答える 4

2

jhwist が言ったようString.findに、一致の最小インデックスを返します。したがって、部分文字列が実際に見つかった場合にのみ再帰が発生します (そうでない場合、String.find は -1 を返します)。

これは非常に非効率的な方法です。Python はこの関数をサポートしており、 と呼ばれstr.count(sub[, start[, end]])ます。ここに文書化されています: http://docs.python.org/library/stdtypes.html#str.count

だから代わりに

countSubStringMatchRecursive("test test test test", "test")

あなたが使うだろう

"test test test test".count("test")
于 2011-04-20T20:06:21.487 に答える
1

x は、見つかった部分文字列の位置のインデックスです。-1 の場合、見つからなかったので、メソッドは 0 を返します。

言い換えれば、それは短絡し、2 番目の条件を評価しません (たとえば、再帰呼び出しを行いません)。それ以外の場合は、見つかった部分文字列に 1 を加えた位置を使用して再帰的に自分自身を呼び出し (存在する場合は次の部分文字列を見つけることができるように)、result に 1 を追加します。

于 2011-04-20T20:02:36.007 に答える
0

String.findは、一致の最小インデックスを返します。したがって、部分文字列が実際に見つかった場合にのみ再帰が発生します (そうでない場合、String.find は -1 を返します)。

于 2011-04-20T20:02:45.820 に答える
0

私はPythonについてあまり知らないことを認めますが、これは簡単です。

トリックはその最後の行です。

"return" は最初に x が -1 でないかどうかをチェックします。これは、この関数の現在の再帰が "target" に余分な "key" を見つけられなかったことを意味します。その場合、"and" の後の節は評価されません。関数は呼び出し元の関数に "false" (ゼロ) を返します。

ただし、「x」が実際に -1 でない場合、条件の 2 番目の部分 (「and」の後) が評価され、そのステートメントが行うことは関数自体を呼び出すことですが、現在評価されている「ターゲット」の部分文字列を送信します。 "、"x" (現在の再帰の "target" 内の "key" の位置) の 1 文字後に開始します。次に、関数によって返された値に 1 を加算し、合計を返します。

したがって、関数の最後の再帰は 0 (false) を返し、その前の再帰は 1 (true) を返し、その前の再帰は 2 (true + 1) を返します。

少し混乱するかもしれませんが、これがあなたの質問に答える最善の方法です。

于 2011-04-20T20:25:43.123 に答える