【发布时间】:2021-11-20 02:53:47
【问题描述】:
我正在尝试编写一个代码,它将首先返回所有偶数,然后将奇数附加到列表的末尾(顺序无关紧要),我在一些人的帮助下成功地做到了这一点Stack Overflow 用户.. 但是,我想知道有没有一种方法可以递归地执行此操作??
这是原始代码
def evenorodd(s):
evens = []
odds = []
for num in s:
if num%2 == 0:
evens.append(num)
else:
odds.append(num)
return evens + odds
print(evenorodd([1,2,3,4,5,6,7,8]))
这个函数工作得很好,但是为了拓宽我对递归函数的理解,有人可以帮忙把这段代码改成递归的,这样我就可以知道我应该怎么做才能让它递归?
【问题讨论】:
-
evenorodd要递归,它必须调用自己。不过,这个问题似乎真的适合迭代解决方案。更简洁,使用列表推导:[i for i in s if s % 2 == 0] + [i for i in s if s % 2 != 0] -
或者如果我们定义
odd:def odd(n): return n % 2 == 1,我们可以使用sorted来得到你正在寻找的答案:sorted([1,2,3,4,5,6,7,8], key=odd) -
@Chris
sorted(s, key=1 .__and__) -
这真的很整洁,也很华丽。