我需要获得这样的输出,如果可能的话,使用单个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)]
答案 0 :(得分:2)
您可以使用itertools.chain
和zip(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]