垂直读取Python中具有不同大小的未知数量列表的所有可能组合的所有值

时间:2016-07-13 18:24:01

标签: python list function recursion

我希望实现一个功能,它将垂直在Python中未知数量的列表的所有元素组合在一起。每个列表都有不同的大小。 例如,这是列表列表,每行都是一个列表:

    //Reverse the order of the vertices so, for example, 
    //vertices {v1,v2,v3,v4,v5} become {v5,v4,v3,v2,v1}
    for(int start = 0, end = vertices.length-1; start<end; start++, end--){
        swap(vertices,start,end);
    }

然后我想打印

A0, A1
B0
C0, C1, C2

请注意,在示例中有3个列表,但它们也可以或多或少,不必要3。 我的问题是我不知道如何解决它。我很难实现一个递归方法,其中如果满足某些条件则打印该值,否则递归调用该函数。这里是伪代码:

A0, B0, C0
A0, B0, C1
A0, B0, C2
A1, B0, C0
A1, B0, C1
A1, B0, C2

这里是主要代码:

def printVertically(my_list_of_list, level, index):
    if SOME_CONDITION:
        print str(my_list_of_list[index])

    else:
        for i in range (0, int(len(my_list_of_list[index]))):
            printVertically(my_list_of_list, level-1, index)

level 是列表列表的长度, index 应该表示我想要打印特定元素时使用的特定列表的索引。好吧,不知道如何继续。任何提示?

我搜索过但在所有解决方案中,人们都知道列表的数量或每个列表中的元素数量,例如这些链接:

Link 1

Link 2

Link 3

1 个答案:

答案 0 :(得分:2)

我相信你想要的是各种套装的交叉产品。您可以使用Python的 itertools.product 方法执行此操作。文档为here。类似的东西:

import itertools
a_list = ["A0", "A1"]
b_list = ["B0"]
c_list = ["C0", "C1", "C2"]
for combo in itertools.product(a_list, b_list, c_list):
    print combo

输出:

('A0', 'B0', 'C0')
('A0', 'B0', 'C1')
('A0', 'B0', 'C2')
('A1', 'B0', 'C0')
('A1', 'B0', 'C1')
('A1', 'B0', 'C2')

这会让你感动吗?

一个总体列表的示例:

my_list_list = [a_list, b_list, c_list]
for combo in itertools.product(*my_list_list):
    print combo

...我们得到相同的输出