创建一个函数Integers,其中包含整数、浮点数和字符串值的列表Num。
目标:函数从Num返回一个只显示整数的列表。
例如:
Num = ([10.4, 134, "134", "Stuff", 4, "5"])
[134, 4]
条件:只使用递归而不使用任何循环。
这个问题本身并不适合递归,但是您可以使它工作:
def ints(lst, i=0):
if i < len(lst):
if isinstance(lst[i], int):
yield lst[i]
yield from ints(lst, i+1)
>>> list(ints([10.4, 134, "134", "Stuff", 4, "5"]))
[134, 4]
这使用一个生成器函数来避免传递列表,并运行index来避免更昂贵的切片。
为了代码的可读性,你可以这样写:
def ints(lst):
if lst:
head, *tail = ints
if isinstance(head, int):
yield head
yield from ints(tail)
我是这么想的:
def only_ints(l, ret):
if len(l) == 0:
return ret
x = l.pop()
if type(x) is int:
ret.append(x)
return only_ints(l, ret)
要使用它,请运行:only_ints(Num, [])
(以空返回列表开始)
输入:Num = [10.4, 134, "134", "s", 4]
输出:[4, 134]