1

2 つの文字列を再帰的にリンクしようとしていますが、期待どおりの結果が得られません。

2 つの文字列"abcd""xyz"- 期待される出力は次のようになります"axbyczd"

def strr(str1, str2):

    def recstr(str1, str2, prn):
        if str1 == '':
            return str2
        if str2 == '':
            return str1
        else:
            return prn + recstr(str1[:len(str1)-len(prn)],str2[:len(str2)-len(prn)],prn)
    return recstr(str1, str2, '')

print strr("abcdef","12345")
4

1 に答える 1

5

いずれかの文字列の文字が不足すると、実行中のアキュムレータに連結せずにもう一方の文字列を返しました。s1またはs2が空のときに私が何をするかを見てください。

また、再帰的なケースでは、 and の非常に複雑なスライスがs1ありs2ます。あなたは本当にスライスs1[1:]してs2[1:]

これでできるはず

def recstr(s1, s2, answer=''):
    if not s1:
        return answer+s2
    if not s2:
        return answer+s1
    return recstr(s1[1:], s2[1:], answer+s1[0]+s2[0])

In [15]: s1,s2 = 'abcd', 'xyz'

In [16]: print recstr(s1,s2)
axbyczd

もちろん、これを行うためのよりクリーンな方法は、itertools.izip_longestandを使用することitertools.chain.from_iterableです。

In [23]: zips = itertools.izip_longest(s1,s2, fillvalue='')

In [24]: ''.join(itertools.chain.from_iterable(zips))
Out[24]: 'axbyczd'

[パラメータを指摘してくれた@AshwiniChaudharyにfillvalue感謝izip_longest]

お役に立てれば

于 2012-11-03T21:05:31.767 に答える