如何仅通过使用不带循环的递归以及任何内置方法或函数来用python写代码?我尝试过:
def myRemove(x, cont): # x is a string inside of the list cont
if x == cont:
return None
elif len(x) > len(cont):
return None
else:
if "x" not in cont[0]:
return myRemove(x,cont[1:])
else:
return cont
答案 0 :(得分:2)
我在您的代码中看到了一些问题:
您的代码中的以下行在语义上是错误的:
if "x" not in cont[0]:
...
此处"x"
是字符串'x',而不是x
的值。要解决此问题,请删除引号。
if x not in cont[0]:
...
要检查变量是否在列表中,请使用in
。例如
>>> "test" in ["test", "wow", "u"]
true
要检查一个变量是否等于另一个变量,请使用==
。例如
>>> "test" == ["test", "wow", "u"][0]
true
代码的固定部分:(因为cont[0]
返回一个值而不是一个列表)
if x == cont[0]:
...
您必须将返回的列表与列表部分并置在另一个列表之前。 否则,您将始终返回列表的最后一部分。
def remove(string, string_list):
if string_list[0] == string:
return string_list[1:]
else:
return string_list[:1] + remove(string_list[1:], string)
答案 1 :(得分:1)
def recursive_remove(x: str, cont: list):
""" removes items equal to x using recursion only
cont: list of strings
x: string to remove from list
"""
if len(cont) == 0:
return []
if cont[0] != x:
return [cont[0]] + recursive_remove(x=x, cont=cont[1:])
else:
return recursive_remove(x=x, cont=cont[1:])
list_without_banana = recursive_remove(x='banana', cont=['apple', 'banana', 'strawberry', 'peanut'])
print(list_without_banana)
>>>['apple', 'strawberry', 'peanut']