Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在长度未知的列表上运行嵌套循环_Python_Python 3.x_List - Fatal编程技术网

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
等等

当我知道I
len(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循环,您也以错误的方式使用它