python - 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)
解决方案
所以,我尝试了这个修改:
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
似乎可以在几个测试中使用,如果您发现它不起作用的案例,请发布,以便我可以尝试查看它。
推荐阅读
- javascript - node.js 从数组或对象中获取数据
- php - 将包含一些布尔值的 CSV 转换为数组
- c - 数组中的数字未从文件中的第一个数字显示
- lisp - lisp 中第一次搜索下的前向链接
- html - 下拉菜单在 input-group-btn 下
- recursion - 元音的最长有序子序列 - 动态规划
- python-3.x - 如何跳过不在for循环范围内的任何值
- docker - 在构建时从 docker 访问已安装的卷以进行 composer/npm 安装?
- python - NameError:名称“容器”未定义 Python Webscraping
- sql - 如果应用程序崩溃,如何取消登录客户端