Python 递归问题--循环读取多层列表中的元素

NonBot 2016-08-29 01:30:52
程序功能:读取一个列表x,但该列表中可能会嵌套一些其它列表,然后返回特定的值

比如这样一个列表:
raw = ['PCXXX', ['0078', 8831], ['0000', '7777']]


因为可能有多层,考虑用递归实现:
先写个demo验证一下
raw = ['PCXXX', ['0078', 8831], ['0000', '7777']]

def get_data(datas):
for item in datas:
if isinstance(item, (str, int)):
print(item, type(item))
else:
get_data(item)


get_data(raw)




ok,看起来问题,那么就return出来,假设我需要的值为0000(字符串)

raw = ['PCXXX', ['0078', 8831], ['0000', '7777']]

def get_data(datas):
for item in datas:
if isinstance(item, (str, int)):
if item == '0000':
return item
else:
return get_data(item) # 这里加不加前面的return都一样


x = get_data(raw)
print(x)




输出的是None,我擦,为什么?google了N久,就是没明白

望解答
...全文
857 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
NonBot 2016-08-30
  • 打赏
  • 举报
回复
感谢解答,测试成功了,不过还是有点疑问
引用
问题出在这里,函数中如果没有遇到return的话,python默认会返回None
, 我这里return item不是有return吗?有点懵,还是说是python的特性?
zonhuang 2016-08-30
  • 打赏
  • 举报
回复
引用 2 楼 bfrbsgbr1234 的回复:
感谢解答,测试成功了,不过还是有点疑问
引用
问题出在这里,函数中如果没有遇到return的话,python默认会返回None
, 我这里return item不是有return吗?有点懵,还是说是python的特性?
但是这个return只有在if成立的情况下才会运行到
zonhuang 2016-08-29
  • 打赏
  • 举报
回复

raw = ['PCXXX', ['0078', 8831], ['0000', '7777']]

def get_data(datas):
    for item in datas:
        if isinstance(item, (str, int)):
            if item == '0000':
                return item
        else:
            return get_data(item) # 问题出在这里,函数中如果没有遇到return的话,python默认会返回None,因此运行到raw当中第一个list,如果没有找到match的元素,就不会去寻找下一个list而是返回None

x = get_data(raw)
print(x)
可以改成这样:

raw = ['PCXXX', ['0078', 8831], ['0000', '7777']]


def get_data(datas):
    for item in datas:
        if isinstance(item, (str, int)):
            if item == '0000':
                return item
        else:
            if(get_data(item)!=None):#这里其实加一个中间变量temp=get_data(item),再直接判断temp运行效率更高
                return(get_data(item))
                
x = get_data(raw)
print(x)

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧