我有一个很长的嵌套列表,看起来像这样
['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)
答案 0 :(得分:1)
因此,我尝试了此修改:
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
似乎可以在几次测试中使用,如果您发现无法解决的情况,请发布,以便我尝试查看。