使用python将嵌套列表转换为行



我遇到一个场景,我的本地递归实现程序输出是一个嵌套列表,非常类似于树。所设计的嵌套列表是对复杂结构的抽象。我所需要的是将嵌套列表解析为许多不同的行,尽可能多地使用组合(可选地实现递归(。

以前我尝试过任何一棵树,但我的需求很复杂,尽管很好,但它并没有满足我量身定制的需求。请考虑嵌套列表是多维

输入1

list = [a,b,[c,d]]

输出1

row1 : a,b,c
row2 : a,b,d 

输入2

list = [a,b,[c,[d,[e,f]]]]

输出2

row1 : a,b,c
row2 : a,b,d,e
row3 : a,b,d,f

输入3

list = [a,[b,c],[d,e]]

输出3

row1 : a,b,d
row2 : a,b,e
row3 : a,c,d
row4 : a,c,e

1.输出中的行仅用于表示目的,输出可以是包含许多元素的列表

2.a、b、c、d等都是对象

我对印度语进行了独立研究,所以找不到比嵌套列表更好的方法来实现关键递归输出。如果您确实有嵌套列表表示,也可以随意提出任何替代方案,以更容易的方式获得输出。

您可以将递归与itertools.product:一起使用

import itertools as it
def flatten(d, s = False):
if not s:
l = [[i] if not isinstance(i, list) else flatten(i, True) for i in d]
yield from it.product(*l)
else:
for i in d:
if not isinstance(i, list):
yield i
else:
yield from flatten(i, False)
def form_t(d):
for i in d:
if not isinstance(i, tuple):
yield i
else:
yield from form_t(i)
all_lists = [['a', 'b', ['c', 'd']], ['a', 'b', ['c', ['d', ['e', 'f']]]], ['a', ['b', 'c'], ['d', 'e']]]
for i in all_lists:
print([tuple(form_t(j)) for j in flatten(i)])

输出:

[('a', 'b', 'c'), ('a', 'b', 'd')]
[('a', 'b', 'c'), ('a', 'b', 'd', 'e'), ('a', 'b', 'd', 'f')]
[('a', 'b', 'd'), ('a', 'b', 'e'), ('a', 'c', 'd'), ('a', 'c', 'e')]

相关内容

  • 没有找到相关文章

最新更新