我将列表定义为:
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
等等;
当我知道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
以这种方式。
答案 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时,根本就没有任何意义。