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

时间:2018-07-01 15:54:07

标签: python python-3.x list

我将列表定义为:

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

当我知道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 

以这种方式。

1 个答案:

答案 0 :(得分:0)

假设第二个给定示例与列表Month,Year,YearMonth,Population 1,2017,201701,100 1,2018,201801,300 2,2018,201802,310 3,2018,201803,320 4,2018,201804,330 2,2017,201702,200 3,2017,201703,300 4,2017,201704,400 5,2017,201705,500 6,2017,201706,600 7,2017,201707,700 8,2017,201708,800 9,2017,201709,900 10,2017,201710,1000 11,2017,201711,1100 12,2017,201712,1200 是正确的,则可以结合使用[('A', 'B', 'C', 'D'), ('E', 'F', 'G'), ('H',), ('I', 'J', 'K')]itertools.product来完成所需的工作:

functools.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')]

我假设您的第二个示例是正确的,因为当第一个示例的长度扩展到大于2时,根本就没有任何意义。