遍历/展平/构造嵌套列表结构的算法
flatnest的Python项目详细描述
最平坦的
此软件包提供:
- 提供生成器以遍历嵌套列表结构(深度优先或宽度优先)。在
- 从嵌套列表结构中提取结构信息到字符串结构模式,然后可以将其与展平列表结合使用,以重建原始的嵌套列表结构。在
- 平面索引与其相应的嵌套索引序列之间的转换(反之亦然)。在
深度优先搜索模式有两种:深度优先搜索模式。 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被放在末尾,尽管嵌套结构是相同的。在
- 项目
标签: