代码之家  ›  专栏  ›  技术社区  ›  Renan Andrade

将一个新列表与两个基本列表组合[重复]

  •  1
  • Renan Andrade  · 技术社区  · 2 年前

    我想将两个列表组合起来,将它们组织成第一个列表的第一个元素是新列表的第一项,第二个列表的第二个元素是第二个,依此类推

    count = 12
    list = list(range(count))
    
    list1 = []
    list2 = []
    
    for x in range(0, count, 4):
        list1.append(x)
    
    for y in range(3, count, 4):
        list2.append(y)
    
    #Concatenate doesn't work
    newlist = list1 + list2
    
    print(newlist)
    print(list)
    

    这样做的结果是:

    newlist = [0, 4, 8, 3, 7, 11]
    

    但我想要这样的东西:

    newlist = [0, 3, 4, 7, 8, 11]
    
    4 回复  |  直到 2 年前
        1
  •  1
  •   gog    2 年前

    考虑:

    a = [1,2,3]
    b = [7,8,9]
    
    c = [None] * (len(a) + len(b))
    c[0::2] = a
    c[1::2] = b
    print(c)
    ## [1, 7, 2, 8, 3, 9]
    

    顺便说一句,这被称为“交错”,在论坛上搜索其他选项。

        2
  •  0
  •   Chris    2 年前

    zip 将列表放在一起,然后用 itertools.chain.from_iterable :

    import itertools
    
    l1 = [1, 2, 3]
    l2 = [4, 5, 6]
    
    list(itertools.chain.from_iterable(zip(l1, l2)))
    # => [1, 4, 2, 5, 3, 6]
    

    这样做是因为 拉链 给出了一个配对列表:

    list(zip(l1, l2))
    # => [(1, 4), (2, 5), (3, 6)]
    

    itertools.chain.from_interable flattens 他们

    这也适用于两个以上的列表:

    l1 = [1, 2, 3]
    l2 = [4, 5, 6]
    l3 = [7, 8, 9]
    
    list(itertools.chain.from_iterable(zip(l1, l2, l3)))
    # => [1, 4, 7, 2, 5, 8, 3, 6, 9]
    
        3
  •  0
  •   FJSevilla    2 年前

    如果两个列表的项目数相同,只需使用 zip 和列表压缩:

    count = 12
    
    list1 = list(range(0, count, 4))
    list2 = list(range(3, count, 4))
    
    newlist = [item for pair in zip(list1, list2) for item in pair]
    #[0, 3, 4, 7, 8, 11]
    

    其中,使用“传统”表示循环和 list.append ,相当于:

    newlist = []
    for pair in zip(list1, list2):
        for item in pair:
            newlist.append(item)
    
        4
  •  -3
  •   XMehdi01    2 年前

    您可以使用 sorted 存档您的结果

    count = 12
    list = list(range(count))
    
    list1 = []
    list2 = []
    
    for x in range(0, count, 4):
        list1.append(x)
    
    for y in range(3, count, 4):
        list2.append(y)
    
    print(list1)# ==> [0, 4, 8]
    print(list2)# ==> [3, 7, 11]
    newlist = list1 + list2
    print(sorted(newlist))# ==> [0, 3, 4, 7, 8, 11]
    
    推荐文章