我希望实现一个功能,它将垂直在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 应该表示我想要打印特定元素时使用的特定列表的索引。好吧,不知道如何继续。任何提示?
我搜索过但在所有解决方案中,人们都知道列表的数量或每个列表中的元素数量,例如这些链接:
答案 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
...我们得到相同的输出