垂直读取Python中未知数量的不同大小列表的所有可能组合的所有值
我想实现一个函数,该函数在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。 我的问题是我不知道如何解决它。我很难实现递归方法,在这种方法中,如果满足某个条件,则打印该值,否
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(我的列表)
,但它不打印任何组合。谢谢好了…:-)