1,list = [{‘name’:’小红’,sub’:[{‘name’:’小明’,’sub’:[{‘name’:’小花’}]},{’name‘:’小黑’}]}]
这是一个嵌套列表,但是嵌套的可能有n层,如何运用递归函数得到列表中所有的“name”值,并且有层级关系的名字需要拼接起来,得到的结果是“[‘小红’,’小红’/’小明,’小红’/’小明/’小花’, ‘小红’/’小黑’]” 。
解题思路:
因为外层的名字要与内层名字拼接,所以每次获取外层的名字,都要作为参数传入内层,最外层参数默认为空字符串;每一次将外层名字与当前层名字拼接后,都判断是否存在下一层,如果存在则将下一层的列表和当前层的拼接结果作为参数进行递归,并将递归结果与当前结果列表合并。
lst = [{
'name': '小红', 'sub': [{
'name': '小明', 'sub': [{
'name': '小花'}]}, {
'name': '小黑'}]}]
def fun(lst, name=''): # 参数“name”为已从字典中取出的键值
result = [] # 每次递归的结果列表
for dic in lst: # 从列表获取字典
if name: # 如果有上一次递归结果
names = name + '/' + dic['name'] # 上一次递归结果连接当前字典“name”键的值
else:
names = dic['name'] # 直接将当前字典“name”键的值存入
result.append(names) # 结果列表中添加当前递归结果
sub = dic.get('sub', None) # 获取子级列表
if sub: # 如果存在子级列表
result = result + fun(sub, names) # 当前结果列表与子级结果列表合并
return result # 返回每次递归结果列表
print(fun(lst))
2,分析以下代码的结果:
def func():
temp = [lambda x: i * x for i in range(4)]
return temp
for f in func():
print(f(2))