How does a recursive function returns a tuple of lists?
问题是:定义一个名为separate的递归函数;它传递一个谓词和一个列表;它返回一个2元组,其0索引是参数列表中谓词返回为真的所有值的列表,其1索引是参数列表中谓词返回为假的所有值的列表。调用
下面是他的幂函数示例:
1 2 3 4 5 6 7 8 9 | def power(a,n): def square(n) : n*n if n == 0: return 1 else: if n%2 == 1: return a*power(a,n-1) else: return square( power(a,n//2) ) |
我的尝试:
1 2 3 4 5 6 7 8 9 10 11 12 | def separate(p,l): l1=[] l2=[] if l == []: return [],[] else: if p(l[0]): l1=([l[0]]+map_pos(p,l[1:])) return l1,l2 else: l2.extend([l[0]]+separate(p,l[1:])) return l1,l2 |
调用此函数:
注意predicate.is_positive是来自predicate模块的函数,它接受一个int,如果int为正数则返回true。
有人能帮我吗?用实际的代码将是很好的,真的很感激。
这可能是你想做的
1 2 3 4 5 6 7 8 9 10 11 12 13 | def separate(p, L): if L == []: return [], [] l1, l2 = separate(p, L[1:]) item = L[0] if p(item): l1.append(item) else: l2.append(item) return l1, l2 |
由于
可以使用默认参数来避免进行切片
1 2 3 4 5 6 7 8 9 10 11 12 13 | def separate(p, L, idx=0): if idx == len(L): return [], [] l1, l2 = separate(p, L, idx + 1) item = L[idx] if p(item): l1.append(item) else: l2.append(item) return l1, l2 |
看起来还是很笨拙。这不是一个真正需要递归解决方案的任务