1

文字列が与えられた場合、そのシーケンス内の特定の長さのすべての回文のインデックスを見つけて、回文の長さの横にそのインデックスを出力する必要があります。

たとえば、4 文字の長さの回文が必要な場合:

seq = 'abbacdefggfhijkkjlmn' 

最適な読み取り値は次のようになります。

[(0,4), (7,4), (13,4)]

これを行う関数を作成しましたが、問題があります。正しいデータ セットが返されますが、シーケンスの長さと同じ回数、何度も返されます。たとえば、上記のシーケンスでは、データ セットが 20 回返されます。

def find_palindromes(seq,y):
L = len(seq)
res = []
for x in seq:
    x=0
    while x<= L-y:
        if seq[x:x+y] == reverse(seq[x:x+y]):
            res.append((x,y))
        x=x+1
return res

私のグリッチに関する洞察は本当にありがたいです。これが最も効率的な方法ではないことはわかっていますが、私は信じられないほど新しいので、足を濡らそうとしています。

4

2 に答える 2

1

あなたの for ループは毎回 0 から始まるので、 の文字の数だけ効果的にこれを実行していますseq。while ループはそれだけで十分なはずです。必要なのは、シーケンスを 1 回反復することだけです。したがって、(2rs2ts のコメントにあるように)for x in seq行を削除するだけです。

それは本当に簡単な修正です。もう少し抜本的な修正は、while ループをループに切り替えることfor x in range(0, L-y):です。

また、関数ヘッダーではないコード内のすべてをインデントする必要があるため、Python はそれが関数内にあることを認識します。

于 2013-07-18T23:03:23.007 に答える
0

必要に応じた 1 行の式を次に示します。

def find_palindromes(seq,y):
  return [(seq.index(seq[x:x+y]),y) for x in range(len(seq)-y) if seq[x:x+y] == seq[x:x+y][::-1]]
于 2013-07-18T23:12:23.133 に答える