从二维列表创建所有可能的一维列表

Create all possible 1D lists from 2D list

我的想法是,我正在创建一个基于 N 个不同可能层的决策树。在某些情况下,只有某些层会影响结果,例如:

在这个例子中,平方可以是 LL 和 RL 的结果,所以这可以用“ANY”,L 来表示。

问题是我不能(据我所知)在 python 中表示“任何”,我的想法是我将有一个字典来表示结果的路径, 即

My_dict = {tuple(["ANY",L]): "Square"}

我必须创建一个如下所示的数组来表示可能性:

[[L,R], L]

我希望能够从这个列表输出两个形状列表:

[L,L], [R,L]

表示通往广场的所有可能路径。

我觉得 itertools 模块应该可以做到这一点,但我自己找不到任何东西,itertools.permutations 只是 returns 列表中的位置变化,即 [L,[L,R]][[L,R],L].

任何建议都很好。请记住,该解决方案需要适用于各种数据类型,即实际上,树结构选项可以是布尔值或整数,而不仅仅是左或右。

您可以使用 itertools.product:

from itertools import product

data = [['L','R'], ['L']]
result = list(product(*data))
print(result)

[('L', 'L'), ('R', 'L')]

[仍然不确定你到底想要什么]

Return 所有可能的路径,包括循环。

编辑:对于任何数据类型

import itertools as it

def path_formatter(node):
    node1, node2 = node
    if len(node1) == 1:
        node1 = node1[0]
    if len(node2) == 1:
        node2 = node2[0]
    return node1, node2

p_lr = it.product('LR', repeat=2)
p_l = it.product('L', repeat=1)
p_r = it.product('R', repeat=1)

paths = map(path_formatter, it.combinations(it.chain(p_l, p_r, p_lr), r=2))
print(list(paths))

[原始 post - 仅字符串] 这里所有连接任何层的任何节点的可能路径,作为字符串列表。

import itertools as it


def formatter(lr_tuple):
    # format list of tuples to string
    l, r = lr_tuple
    if len(l) == 2:
        l = '[' + ','.join(l) + ']'
    if len(r) == 2:
        r = '[' + ','.join(r) + ']'
    return f'[{l},{r}]'


p_lr = it.product('LR', repeat=2)
p_l = it.product('L', repeat=1)
p_r = it.product('R', repeat=1)


nodes = [''.join(i) for i in it.chain(p_l, p_r, p_lr)]
nodes_pairs = it.combinations(nodes, r=2)


paths = map(formatter, nodes_pairs)

print(list(paths))

输出

# for any data type
[('L', 'R'), ('L', ('L', 'L')), ('L', ('L', 'R')), ('L', ('R', 'L')), ('L', ('R', 'R')), ('R', ('L', 'L')), ('R', ('L', 'R')), ('R', ('R', 'L')), ('R', ('R', 'R')), (('L', 'L'), ('L', 'R')), (('L', 'L'), ('R', 'L')), (('L', 'L'), ('R', 'R')), (('L', 'R'), ('R', 'L')), (('L', 'R'), ('R', 'R'))

# for string
['[L,R]', '[L,[L,L]]', '[L,[L,R]]', '[L,[R,L]]', '[L,[R,R]]', '[R,[L,L]]', '[R,[L,R]]', '[R,[R,L]]', '[R,[R,R]]', '[[L,L],[L,R]]', '[[L,L],[R,L]]', '[[L,L],[R,R]]', '[[L,R],[R,L]]', '[[L,R],[R,R]]', '[[R,L],[R,R]]']