Python 在长度未知的列表上运行嵌套循环
我将列表定义为:Python 在长度未知的列表上运行嵌套循环,python,python-3.x,list,Python,Python 3.x,List,我将列表定义为: comp = [] comp.append(["A", "B", "C", "D"]) comp.append(["E", "F", "I"]) 在实际情况中,我不知道comp或comp[x] 现在,我正在尝试对此运行嵌套循环,但失败了。我的意思是, 如果运行当前代码段: for compsi in range(len(comp)): for elemn in range(len(comp[compsi])): print(comp[compsi][elemn])
comp = []
comp.append(["A", "B", "C", "D"])
comp.append(["E", "F", "I"])
在实际情况中,我不知道comp
或comp[x]
现在,我正在尝试对此运行嵌套循环,但失败了。我的意思是,
如果运行当前代码段:
for compsi in range(len(comp)):
for elemn in range(len(comp[compsi])):
print(comp[compsi][elemn])
输出为A B C D E F I
我尝试的是,对于comp[0]
的每个元素,将运行完整的comp[1]
,因此,我将得到:
A E F I B F I C F I D E F I
等等
当我知道Ilen(comp)
=2时,我可以使用嵌套for循环轻松地实现这一点,如下所示:
for lo in range(len(comp[0])):
for l1 in range(len(comp[1])):
print(...)
但是,当我不知道comp
的长度时,我如何才能达到同样的效果呢
请帮忙
好的,比如说,我们有comp=[['A','B','C','D'],['E','F','G'],['H'],['I','J','K']
。我们将以以下方式结束:
A E H I
A E H J
A E H K
A F H I
...
B E H I
B E H J
B E H K
...
D G H K
通过这种方式。假设第二个给定示例的列表
[('A','B','C','D'),('E','F','G'),('H',),('I','J','K')]
是正确的,您可以使用itertools.product
和functiontools.reduce
的组合来完成您想要的:
from functools import reduce
from itertools import product
comp = [('A', 'B', 'C', 'D'), ('E', 'F', 'G'), ('H',), ('I', 'J', 'K')]
print(list(reduce(lambda a, b: [(*p[0], p[1]) for p in product(a, b)], comp)))
这将产生:
[('A', 'E', 'H', 'I'), ('A', 'E', 'H', 'J'), ('A', 'E', 'H', 'K'), ('A', 'F', 'H', 'I'), ('A', 'F', 'H', 'J'), ('A', 'F', 'H', 'K'), ('A', 'G', 'H', 'I'), ('A', 'G', 'H', 'J'), ('A', 'G', 'H', 'K'), ('B', 'E', 'H', 'I'), ('B', 'E', 'H', 'J'), ('B', 'E', 'H', 'K'), ('B', 'F', 'H', 'I'), ('B', 'F', 'H', 'J'), ('B', 'F', 'H', 'K'), ('B', 'G', 'H', 'I'), ('B', 'G', 'H', 'J'), ('B', 'G', 'H', 'K'), ('C', 'E', 'H', 'I'), ('C', 'E', 'H', 'J'), ('C', 'E', 'H', 'K'), ('C', 'F', 'H', 'I'), ('C', 'F', 'H', 'J'), ('C', 'F', 'H', 'K'), ('C', 'G', 'H', 'I'), ('C', 'G', 'H', 'J'), ('C', 'G', 'H', 'K'), ('D', 'E', 'H', 'I'), ('D', 'E', 'H', 'J'), ('D', 'E', 'H', 'K'), ('D', 'F', 'H', 'I'), ('D', 'F', 'H', 'J'), ('D', 'F', 'H', 'K'), ('D', 'G', 'H', 'I'), ('D', 'G', 'H', 'J'), ('D', 'G', 'H', 'K')]
但是,给出了[('A','B','C','D'),('E','F','I')]的第一个示例,它将输出以下内容:
[('A', 'E'), ('A', 'F'), ('A', 'I'), ('B', 'E'), ('B', 'F'), ('B', 'I'), ('C', 'E'), ('C', 'F'), ('C', 'I'), ('D', 'E'), ('D', 'F'), ('D', 'I')]
我假设您的第二个示例是正确的,因为第一个示例背后的逻辑在扩展到大于2的长度时根本没有意义。对于len(comp)==4的组合应该如何看待?请检查OP中的更新,因为我不能在这里做多行数学模式,你文章中的第一个和第二个例子是不同的。你想要哪一个?(给出第二个示例的逻辑,并使用第一个示例的输入,输出应该是AE、AF、AI、be、BF、BI…-这称为笛卡尔积)下一个元素循环上的递归?您在错误的位置使用for循环,您也以错误的方式使用它