首页 > 解决方案 > Python:在深度嵌套列表中搜索值

问题描述

我有一个很长的嵌套列表,看起来像这样

['a','b',['c','d',['e',['a','b',['c','d',['e',['a','b',['c','d',['e4',['a','b',['c','d',['e',['a','b',['c','d',['e',['a','b',['c','d',['e14']]]]]],]]]]]]]]],]]]

我试图value在该列表中找到,但是在我的情况下,正常的 for 循环不起作用,因为我需要遍历每个循环,这需要很长时间。

我想出了这个递归函数:

def locate(seq :list, value:int):
    for item in seq:
        if item.__class__ is list:
            locate(item, value)
        else:
            if(item == value):
                return True
    return False

所以这是我为我的算法创建的单元测试:

import unittest

class TestCase(unittest.TestCase):
    def test_locate(self):
        self.assertEqual(locate(['a','b',['c','d',['e']]],'e'), True)

    def test_locate_two(self):
        self.assertEqual(locate(['a','b',['c','d',['e',['a','b',['c','d',['e',['a','b',['c','d',['e4',['a','b',['c','d',['e',['a','b',['c','d',['e',['a','b',['c','d',['e14']]]]]],]]]]]]]]],]]],'e'), True)

    
if __name__ == '__main__':
    unittest.main()

测试结果:

Ran 2 tests in 0.001s

FAILED (failures=2)

标签: pythonmultidimensional-array

解决方案


所以,我尝试了这个修改:

def locate(seq :list, value:int):
el_check = False
for item in seq:
    if item.__class__ is list:
        el_check = el_check or locate(item, value)
    else:
        if(item == value):
            return True
return el_check

似乎可以在几个测试中使用,如果您发现它不起作用的案例,请发布,以便我可以尝试查看它。


推荐阅读