gpt4 book ai didi

python - 递归地过滤元组内的元组

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:56 26 4
gpt4 key购买 nike

我想弄清楚如何在元组中过滤元组像这样:

input>>>filter_tree((1,2,3,4,(1,2,3)),lambda x:x%2==0)

output>>> ((2,4,(2))

这是我得到的结果:

 def filter_tree(tree,f):
if type(tree)!=tuple:
return tree
return tuple(filter(f,tuple(filter_tree(node,f) for node in tree)))

当元组中没有元组时它会工作,我不知道我需要更改什么才能使其工作(我必须只使用递归)。有人有想法吗?

最佳答案

这是一个同样有效的生成器解决方案:

def filter_nested_tuples(iterable, f):
"""filter elements from nested tuples from function f"""
for x in iterable:
if isinstance(x, tuple):
yield tuple(filter_nested_tuples(x, f))
elif f(x):
yield x

def is_even(x):
"""Indicates if number is even"""
return x % 2 == 0

tup = (1,2,3,4,(1,2,3))
print(tuple(filter_nested_tuples(tup, f=is_even)))
# (2, 4, (2,))

注意:使用 isinstance() 的好处在 type()是当你想支持多种类型比如list,set,那么你可以只传递一个类型的元组:isinstance(x, (list, set,元组))

关于python - 递归地过滤元组内的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54132161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com