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

垂直读取Python中未知数量的不同大小列表的所有可能组合的所有值,python,list,function,recursion,Python,List,Function,Recursion,我想实现一个函数,该函数在Python中垂直地组合了未知数量的列表的所有元素。每个列表的大小不同。 例如,这是列表的列表,每一行都是一个列表: A0, A1 B0 C0, C1, C2 然后我想打印 A0, B0, C0 A0, B0, C1 A0, B0, C2 A1, B0, C0 A1, B0, C1 A1, B0, C2 请注意,在示例中有3个列表,但它们也可能或多或少,而不是必需的3。 我的问题是我不知道如何解决它。我很难实现递归方法,在这种方法中,如果满足某个条件,则打印该值,否

我想实现一个函数,该函数在Python中垂直地组合了未知数量的列表的所有元素。每个列表的大小不同。 例如,这是列表的列表,每一行都是一个列表:

A0, A1
B0
C0, C1, C2
然后我想打印

A0, B0, C0
A0, B0, C1
A0, B0, C2
A1, B0, C0
A1, B0, C1
A1, B0, C2
请注意,在示例中有3个列表,但它们也可能或多或少,而不是必需的3。 我的问题是我不知道如何解决它。我很难实现递归方法,在这种方法中,如果满足某个条件,则打印该值,否则递归调用该函数。下面是伪代码:

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)
以下是主要代码:

list_zero = []
list_zero.append("A0")
list_zero.append("B0")
list_zero.append("C0")

list_one = []
list_one.append("A1")

list_two = []
list_two.append("A2")
list_two.append("B2")

list_three = []
list_three.append("A3")
list_three.append("B3")
list_three.append("C3")
list_three.append("D3")


my_list_of_list = []
my_list_of_list.append(list_zero)
my_list_of_list.append(list_one)
my_list_of_list.append(list_two)
my_list_of_list.append(list_three)


level=int(len(my_list_of_list))
index=0
printVertically(my_list_of_list, level, index)
level是列表的长度,index应该表示在打印特定元素时使用的特定列表的索引。嗯,不知道该怎么做。有什么提示吗

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


我相信你想要的是各种集合的叉积。您可以使用Python的itertools.product方法来实现这一点。文件是。比如:

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

。。。我们得到了相同的输出,我相信这里需要的是不同集合的叉积。您可以使用Python的itertools.product方法来实现这一点。文件是。比如:

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

。。。我们得到了相同的输出

请解释你是如何从你的输入到你想要的输出的;也许一个完整的例子(没有省略号!)会有帮助。@ScottHunter我改进了它。你能展示一下应该如何使用
index
,以及一个具有预期输出的非零例子吗?谢谢。请解释你是如何从你的输入到你想要的输出的;也许一个完整的例子(没有省略号!)会有帮助。@ScottHunter我改进了它。你能展示一下应该如何使用
index
,以及一个具有预期输出的非零例子吗?谢谢。我正在测试这段代码,但是我不知道我应该放什么来代替打印所有组合的
。。有什么提示吗?谢谢,正是我需要的!谢谢:)还有一个问题。我如何只指定列表列表列表,而不是像这样在方法参数中指定每个列表
itertools.product(a\u列表、b\u列表、c\u列表)
?我已经尝试过这个
itertools.product(我的列表)
,但它不打印任何组合。谢谢好了…:-)我正在测试这段代码,但我不知道我应该放什么来代替打印所有组合的
..
。。有什么提示吗?谢谢,正是我需要的!谢谢:)还有一个问题。我如何只指定列表列表列表,而不是像这样在方法参数中指定每个列表
itertools.product(a\u列表、b\u列表、c\u列表)
?我已经尝试过这个
itertools.product(我的列表)
,但它不打印任何组合。谢谢好了…:-)