0

再帰関数を使用してリストを逆にしようとしています。残念ながら、私は再帰にかなり慣れていません。これは可能ですか?これが私のコードです

def stringRev (word):
    worLen = len(word)
    if worLen == 1:
        return word
    return (word[-1]) + stringRev(word[:-1])

listWord = ["hey", "there", "jim"]
print(stringRev(listWord))
4

3 に答える 3

4

あなたの問題はそれ(word[-1])がリストではなく文字列であるということです。したがって、文字列とリストを追加/連結しようとしています。その式をに変更し[word[-1]]てリストを作成しました。

>>> def stringRev (word):
...     worLen = len(word)
...     if worLen == 1:
...         return word
...     return [word[-1]] + stringRev(word[:-1])
... 
>>> listWord = ["hey", "there", "jim"]
>>> print(stringRev(listWord))
['jim', 'there', 'hey']
>>> 

PS。コードの実行時に受け取ったエラーを含めると便利です。TypeError: Can't convert 'list' object to str implicitly

于 2013-03-01T17:14:49.070 に答える
3

リストの要素の順序を逆にするには、次を変更します。

return (word[-1]) + stringRev(word[:-1])

return [word[-1]] + stringRev(word[:-1])

(角かっこに注意してください)。

word[-1]問題は、文字列( )をリスト()と連結しようとしていることですword[:-1]

問題は、関数が1つの単語を期待しているにもかかわらず、単語のリストを使用してそれを呼び出していることです。

次のように呼び出すと、問題なく機能することがわかります。

for word in ["hey", "there", "jim"]:
    print(stringRev(word))

または、反転した文字列をリストに保存する場合は、次のようにします。

l = [stringRev(w) for w in ["hey", "there", "jim"]]

関数が失敗する1つのコーナーケースは、空の文字列です。それが有効な入力であるかどうかはわかりませんので、問題ではない可能性があります(ただし、修正するのは簡単です)。

于 2013-03-01T17:06:59.043 に答える
1

Pythonで実行したい場合:

reversed(listWord)

単語がリストまたはタプルであると仮定する

http://docs.python.org/2/library/functions.html#reversed

そしてリストを取得するには:

list(reversed(listWord))

動作するはずです

しかし、アルゴリズムが必要な場合は、逆にしたのはあなたの友達ではないと思います!

于 2013-03-01T17:10:13.617 に答える