“如何不均匀地遍历两个列表”

时间:2018-12-28 15:04:26

标签: python iteration

对于这个非常具体的问题,我找不到解决方案。 本质上,我有两个包含两个元素的列表:[A,B]和[1,2]。我想创建一个嵌套循环,该循环在第二个列表上进行迭代和扩展,并在每次迭代后添加第一个列表的每个元素。

最后我要看的是:

A B 
1 A
1 B
2 A
2 B
1 1 A
1 2 A
2 1 A
2 2 A
1 1 B
1 2 B
2 1 B
2 2 B
1 1 1 A
1 1 2 A
...

我的问题是,我这样做的尝试是将A和B递归拆分,以便出现这种模式(也请注意第一行的不同内容):

A
1 A
2 A
1 1 A
1 2 A
2 1 A
2 2 A
1 1 1 A
1 1 2 A
...
B
1 B
2 B
1 1 B
1 2 B
2 1 B
2 2 B
1 1 1 B
1 1 2 B
...

我如何将A和B保持在一起?

代码如下:

def second_list(depth):
    if depth < 1: 
        yield ''
    else:
        for elements in [' 1 ', ' 2 ']:
            for other_elements in list (second_list(depth-1)): 
                yield elements + other_elements


for first_list in [' A ', ' B ']:
    for i in range(0,4): 
        temp=second_list(i)
        for temp_list in list(temp):
            print temp_list + first_list

1 个答案:

答案 0 :(得分:0)

我会尝试以下风格的东西:

l1 = ['A', 'B']
l2 = ['1', '2']

def expand(l1, l2):
    nl1 = []
    for e in l1:
        for f in l2:
             nl1.append(f+e)
             yield nl1[-1]
    yield from expand(nl1,l2)

for x in expand(l1, l2):
    print (x)
    if len(x) > 5:
        break

注意:输出的第一行似乎不是同一规则的乘积,因此此处未生成该行,您可以根据需要手动添加它。

注意2:不构建新生成的元素的列表会更优雅,但是您必须计算两次。