遍历/展平/构造嵌套列表结构的算法

flatnest的Python项目详细描述


最平坦的

View API documentation

此软件包提供:

  1. 提供生成器以遍历嵌套列表结构(深度优先或宽度优先)。在
  2. 从嵌套列表结构中提取结构信息到字符串结构模式,然后可以将其与展平列表结合使用,以重建原始的嵌套列表结构。在
  3. 平面索引与其相应的嵌套索引序列之间的转换(反之亦然)。在

深度优先搜索模式有两种:深度优先搜索模式。 DFS模式中有方括号,大致类似于python列表文本。没有逗号,数字表示该级别嵌套结构中的元素数。在

BFS图案使用*和|符号。*符号看起来有点像一个通配符占位符,表示在该位置存在许多较低级别的子节点。 符号|表示嵌套结构规范的当前级别已完成,并且应紧跟下一个级别的规范,该级别对应于尚未指定的最早的*。在

例如,“1[2[1]3]3[2]”是DFS模式。 在该结构的顶层有以下4项:

  • 1
  • [2[1]3]
  • [2]

在BFS形式中,第一级表示为“1*3*”。 第一个要处理的*是[2[1]3],它由以下3个项目组成:

  • [1]

在BFS形式中,它表示为'2*3'

此时的BFS模式(尚未完成)为“1*3*| 2*3”

下一个未指定的级别是模式中迄今为止的第二个*表示[2]:

只有一项:

此时的BFS模式(尚未完成)为“1*3*| 2*3 | 2” 最后一个未指定的级别是第三个*,它代表[1]。在

最后的BFS模式是'1*3*| 2*3 | 2 | 1'

此模式定义了与其DFS版本相同的嵌套列表结构,即“1[2[1]3]3[2]”。 这两种情况的不同之处在于扁平化列表的顺序。在

DFS扁平化列表的顺序本质上是在python列表文本表示中写入项目的顺序。在

BFS扁平化列表的顺序是将位置较浅的项放在前面,将嵌套较深的项放在后面。在

作为一个简单的例子,请考虑:

>>> flatten([0,1,2,3,[4,5],6,7,8,9])
('4[2]4', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> flatten([0,1,2,3,[4,5],6,7,8,9],bfs)
('4*4|2', [0, 1, 2, 3, 6, 7, 8, 9, 4, 5])

在BFS版本中,嵌套更深的项4和5被放在末尾,尽管嵌套结构是相同的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何读取、验证和移动数据。csv文件?   用于在线蛇游戏的java解析scaing   java JavaFX:在窗口上移动元素(阶段)调整大小   mysql如何使用java中的IOUtils包在jsp中显示多个图像?   Java dateFormat不可解析日期异常   spring mvc java。执行单元测试时lang.AssertionError   java在一个webapp中运行多个调度器有什么问题吗?   JAVAlang.ArrayIndexOutofBounds异常:1未来。get()多线程   java使用MDC或spring boot中的任何过滤器屏蔽日志消息中的密码,而不使用logback。xml文件   与应用服务器的java AJP和SSL通信   java Hibernate更新列表中的特定对象   Java小程序:使用keylistener移动多边形   java访问是一个独立于MainActivity的进程   来自服务器的java重复密钥或完整性约束冲突消息:“列“volume”不能为null”   java是否有任何方法可以确保在Flink on job cancel with savepoint上通知所有检查点侦听器检查点完成?