使用两个变量迭代

时间:2016-03-31 15:18:22

标签: python loops

我需要获得这样的输出,如果可能的话,使用单个for循环。

0 0
0 1
1 2
1 3
2 4
2 5
3 6
3 7

有优雅的方法吗?

对于我的问题的上下文,我实际上有两个列表A = [1,2,3]B = [1,2,3,4,5,6]。注意,列表B是列表A长度的两倍。我需要通过在列表A中添加列表B中的两个连续元素来创建新列表。所以这应该导致列表`C = [(1,1), (1,2),(2,3),(2,4),(3,5),(3,6)]

5 个答案:

答案 0 :(得分:2)

您可以使用itertools.chainzip(A, A)来“重复”A,然后zip使用B

>>> A = [1,2,3]
>>> B = [1,2,3,4,5,6]
>>> zip(itertools.chain(*zip(A, A)), B)
[(1, 1), (1, 2), (2, 3), (2, 4), (3, 5), (3, 6)]

答案 1 :(得分:1)

>>> [(A[i//2], b) for i, b in enumerate(B)]
[(1, 1), (1, 2), (2, 3), (2, 4), (3, 5), (3, 6)]

答案 2 :(得分:1)

zip([item for sub in [[el] * 2 for el in A] for item in sub], B)

答案 3 :(得分:0)

您正在搜索zip函数以迭代两个列表。

def merge_lists(list1, list2):
    assert(len(list2) == 2 * len(list1))
    chunks = [list2[i:i+2] for i in range(0, len(list2),2)]
    for element, chunk in zip(list1, chunks):
        for element2 in chunk:
            yield(element, element2)

答案 4 :(得分:0)

是的,您可以使用zip(),即:

A = [1,2,3]
B = [1,2,3,4,5,6]

for tuple in zip([a for a in A for _ in (0,1)], B):
    print tuple[0], tuple[1]