在长度未知的列表上运行嵌套循环

2024-04-24 04:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我将列表定义为:

comp = []
comp.append(["A", "B", "C", "D"])
comp.append(["E", "F", "I"])

在实际情况中,我不知道compcomp[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 

以这种方式。你知道吗


Tags: in元素列表forlen定义代码段情况
1条回答
网友
1楼 · 发布于 2024-04-24 04:33:23

假设您的第二个列表示例[('A', 'B', 'C', 'D'), ('E', 'F', 'G'), ('H',), ('I', 'J', 'K')]是正确的,您可以使用itertools.productfunctools.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。你知道吗

相关问题 更多 >