我有一個問題,我在一天的大部分時間里都被完全難住了。
我正在嘗試使用沒有附加引數和回圈的遞回來實作 Python 的 split() 函式。
對于給定的輸入字串,這是所需的輸出
mySplit('hello,there,world', ',')
=> ['hello', 'there', 'world']
這是我目前的嘗試,但它實際上只洗掉了分隔符并將字串放在串列中,但我不知道如何將專案附加到串列中!
def mySplit(string, delim):
if len(string) == 1:
return [string]
if string[0] == delim:
return [mySplit(string[1:], delim)[0]]
return [string[0] mySplit(string[1:], delim)[0]]
此代碼導致 ['hellothereworld']
我非常感謝您對這個特定問題的幫助!謝謝!
編輯:為了完全清楚,禁止使用任何回圈或附加引數。此外,諸如 index() 或 find() 之類的字串函式也被禁止,因為它們本質上是回圈。也不允許使用輔助函式。
uj5u.com熱心網友回復:
我會寫這樣的東西:
def my_split(s, delim):
for i, c in enumerate(s):
if c == delim:
return [s[:i]] my_split(s[i 1 :], delim)
return [s]
編輯:糟糕,跳過了問題的關鍵部分。我認為這行得通。
def my_split(s, delim, i=0):
if i == len(s):
return [s]
elif s[i] == delim:
return [s[:i]] my_split(s[i 1 :], delim)
return my_split(s, delim, i 1)
編輯2:這肯定是一個棘手的問題。真是有趣的問題。希望我不會再遇到任何限制:
def my_split(s, delim):
if not s:
return [""]
elif s[0] == delim:
a = my_split(s[1:], delim)
return "", *a
b, *rest = my_split(s[1:], delim)
return [s[0] b] rest
assert my_split("hello,there,world", ",") == ["hello", "there", "world"]
assert my_split("hello world!", ",") == ["hello world!"]
assert my_split("hello world!", " ") == ["hello", "world!"]
uj5u.com熱心網友回復:
def mySplit(string, delim):
if string.count(delim) == 0:
return [string]
idx = string.index(delim)
return [string[:idx]] mySplit(string[idx 1:], delim)
print(mySplit('hello,there,world', ','))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413743.html
標籤:
下一篇:更改具有公共鍵的物件陣列中的鍵
