如何使用python生成上下文树?

时间:2019-05-01 12:51:37

标签: python-3.x graph tree iteration

请,我需要生成如下的上下文树,我使用python,因为许多人建议我这是此类程序的最佳语言之一。我要解决的问题如下:

我有3个向量

  • v1 = [0, 1]
  • v2 = [0, 1, 2]
  • v3 = [‘a’, ‘b’, ‘c’]

知道我的初始向量IV=[0,0,’a’]后,我需要根据以下条件生成所有可能的下一个向量的树:

  • 如果v1=0在下一个级别v1可以采用两个可能的值v1=0v1=1,但是如果v1=1,则永远不会回到0 ,因此它将始终等于1(v1 = 1)
  • 无论v2的值如何,在下一级别,它将始终生成所有可能性,v2=0v2=1v2=3
  • 如果为v3=’a’,则在下一级别v3中为v3=’a’v3=‘b’;如果为v3=’b’,则在下一个级别v3中可以等于v3=’a’v3=‘b’v3=‘c’;如果为v3=’c’,则在下一级别,v3为v3=‘c’v3=‘b’

所以从第一个向量[0,0,a]-> [0,0,a] [0,0,b] [0,1,a] [0,1,b] [0,2,a] [0,2,b] [1,0,a] [1,0,b] [1,1,a] [1,1,b] [1,2,a] [1,2,b]

然后对于每个生成的向量,我必须进行相同的处理,直到达到全局树的5个级别。

能帮我吗?

我从此代码开始生成第一级,但现在我仍在满足以下条件的同时继续生成下一级:

import numpy as np
import itertools
v1 = [0, 1]
v2 = [0, 1, 2]
v3 = ['a', 'b', 'c']
array = [v1, v2, v3]
AllCombinations = list(itertools.product(*array))
m1 = np.asarray(AllCombinations)
root = (0, 0, 'a')

2 个答案:

答案 0 :(得分:0)

这是您想要的吗?

import itertools

def get_combinations(v1, v2, v3, v1_root, v2_root, v3_root):
    # using the list and roots
    # fidn the list we actually want combination for.
    v1 = v1[v1.index(v1_root):]
    # v2 = v2[v2.index(v2_root):]
    if v3_root == 'a':
        v3 = ['a', 'b']
    elif v3_root == 'c':
        v3 = ['c', 'b']
    return list(itertools.product(*[v1, v2, v3]))


v1 = [0, 1]
v2 = [0, 1, 2]
v3 = ['a', 'b', 'c']
array = [v1, v2, v3]
root = (0, 0, 'a')

t = get_combinations(*array, *root)
print(t)

输出:

[(0, 0, 'a'), (0, 0, 'b'), (0, 1, 'a'), (0, 1, 'b'), (0, 2, 'a'), (0, 2, 'b'), (1, 0, 'a'), (1, 0, 'b'), (1, 1, 'a'), (1, 1, 'b'), (1, 2, 'a'),(1, 2, 'b')]

答案 1 :(得分:0)

是,非常感谢,这可以解决我的问题,但是由于我需要生成一棵树,因此需要对列表t中的每个生成项重复相同的处理。为此,我添加了以下几行:

    t = get_combinations(*array, *root)
    array2 = []
    for item in t:
    root = t[t.index(item)]
    t = get_combinations(*array, *root)
    array2.append(t)

Array2是列表[[[0,0,'a'],... [1,1,'b']],[.....],[....]的列表。 ..],并且要能够重复我需要的时间,我必须将每个子列表分别保存在一个新变量L [i]中,但是我没有找到任何方法可以这样做。 假设我有[[1,1,1] [1,0,1] [1,0,0]],我需要使用一个for循环来获得以下结果:List1 = [1,1,1 ] List2 = [1,0,1] List3 [1,0,0]