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

2024-04-28 03:00:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

以前我试过anytree,但我的需求很复杂,虽然很好,但它并没有满足我量身定做的需求。请务必考虑嵌套列表是多维的

输入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等是对象

我对Indi语言进行了独立的研究,所以找不到比嵌套列表更好的实现关键递归输出的方法。如果您确实有嵌套列表表示,也可以自由地建议任何适合以更简单的方式获取输出的替代方法


Tags: 对象方法程序目的元素列表场景结构
1条回答
网友
1楼 · 发布于 2024-04-28 03:00:13

您可以对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')]

相关问题 更多 >