gpt4 book ai didi

python - 编写此递归函数的更多 pythonic 方式

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:36 24 4
gpt4 key购买 nike

此函数旨在采用通用字典(可能递归地包含其他字典和列表)并将其所有内容放在一个线性列表中。

def make_a_list(a):
print type(a)
if (type(a) == type({})):
return make_a_list(a.keys()) + make_a_list(a.values())
elif (type(a) == type([])):
if len(a) > 1:
return make_a_list(a[0]) + make_a_list(a[1:])
return a
else:
return [a]

它完成了它的工作,但我想知道:a) 我是否忘记了任何重要的数据类型? (例如,我忘记了套装)b) 什么是更 pythonic 的编写方式? (特别是我可以写一个列表理解吗?)

最佳答案

您可以使用 yield 避免在您的函数中创建列表/连接。

def make_a_list(a):
if isinstance(a, dict):
yield from make_a_list(a.keys())
yield from make_a_list(a.values())
elif isinstance(a, (list, tuple, set)):
for x in a:
yield from make_a_list(x)
else:
yield a

这是一个生成器,所以如果你真的需要一个列表,你可以这样做:

def make_a_real_list(a):
return list(make_a_list(a))

另请注意,isinstance 比直接比较类型要好。

关于python - 编写此递归函数的更多 pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514119/

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