混合两个相同长度的列表 python

mixing two lists same length python

我想将两个列表的每个元素相互混合,它们的长度相同:

list1 = [(m0, m0+b), (m1, m1+b), (m2, m2+b),...]
list2 = [(n0, n0+b), (n1, n1+b), (n2, n2+b),...]

创建这样的列表:

new_list = [((m0, m0+b), (n0, n0+b)), ((m0, m0+b), (n1, n1+b)), ((m0, m0+b), (n2, n2+b)),..., ((m1, m1+b), (n0, n0+b)), ((m1, m1+b), (n1, n1+b)), ((m1, m1+b), (n2, n2+b)), ..., ((m2, m2+b), (n0, n0+b)), ((m2, m2+b), (n1, n1+b)), ((m2, m2+b), (n2, n2+b)), ...]

更新:

解决方案

from itertools import product

    list(product(list1, list2))
    [((m0, m0+b), (n0, n0+b)),
     ((m0, m0+b), (n1, n1+b)),
     ((m0, m0+b), (n2, n2+b)),
     ((m1, m1+b), (n0, n0+b)),
     ((m1, m1+b), (n1, n1+b)),
     ((m1, m1+b), (n2, n2+b)),
     ((m2, m2+b), (n0, n0+b)),
     ((m2, m2+b), (n1, n1+b)),
     ((m2, m2+b), (n2, n2+b))]

使用:

from itertools import product
list(product(list1, list2))
[((m0, m0+b), (n0, n0+b)),
 ((m0, m0+b), (n1, n1+b)),
 ((m0, m0+b), (n2, n2+b)),
 ((m1, m1+b), (n0, n0+b)),
 ((m1, m1+b), (n1, n1+b)),
 ((m1, m1+b), (n2, n2+b)),
 ((m2, m2+b), (n0, n0+b)),
 ((m2, m2+b), (n1, n1+b)),
 ((m2, m2+b), (n2, n2+b))]

使用 zipitertools.chain

的理解
from itertools import chain

m = [ ... ]
n = [ ... ]
b = ...

new_list = list(chain(*(((m1, m2+b), (n1, n2+b)) for (m1, m2), (n1, n2) in zip(m, n))))