只是測試s
和t
是空的,返回其他價值,如果他們中的一個是:
def alt(s, t):
if not s:
return t
elif not t:
return s
else:
return s[0] + t[0] + alt(s[1:], t[1:])
即使兩個s
和t
爲空,返回空字符串,這是一個完全有效的結束狀態。
您可以縮短這:
def alt(s, t):
if not (s and t):
return s + t
return s[0] + t[0] + alt(s[1:], t[1:])
所以在達到最終狀態時無論是s
或t
是空的(或者它們兩者都是)。
這將產生所需輸出:
>>> alt('hello', 'bye')
'hbeylelo'
迭代版本是:
from itertools import chain
try:
# Python 2
from itertools import izip_longest as zip_longest
except ImportError:
# Python 3
from itertools import zip_longest
def alt_iterative(s, t):
return ''.join(chain.from_iterable(zip_longest(s, t, fillvalue='')))
它使用itertools.zip_longest()
function做的大部分工作。
的OP使用Python 3而不是2,所以你會在這裏得到一個導入錯誤。 'zip_longest'(和2中的'izip_longest')帶一個'fillvalue'參數,只需將其設置爲''''。 –
只使用'''.join()'而不是'reduce()'.. –
@MartijnPieters當然,感謝提示。有時你看不到樹木。 –