代码之家  ›  专栏  ›  技术社区  ›  user2662833

从多个列表中获取元素

  •  1
  • user2662833  · 技术社区  · 6 年前

    给定多个列表,如图所示:

    a = [1, 2, 3]
    b = [5, 6, 7, 8]
    c = [9, 0, 1]
    d = [2, 3, 4, 5, 6, 7]
    ...
    

    在开始从第二个列表中获取元素之前,我希望能够将它们组合起来,从第一个列表中获取尽可能多的元素,因此结果将是:

    result = [1, 2, 3, 8, 6, 7]
    

    for 循环。也许是一个聪明的 zip .

    3 回复  |  直到 4 年前
        1
  •  5
  •   user2390182    6 年前

    简单的切片和拼接:

    a + b[len(a):]
    

    res = []
    for lst in (a, b, c, d):
        res += lst[len(res):]
    # [1, 2, 3, 8, 6, 7]
    
        2
  •  2
  •   Chris_Rands    6 年前

    itertools.zip_longest()

    >>> from itertools import zip_longest
    >>> [next(x for x in t if x is not None) for t in zip_longest(a,b,c,d)]
    [1, 2, 3, 8, 6, 7]
    

    默认填充值为 None 所以就拿第一个来说 没有 使用 zip_longest 没有 是有效的数据值)

        3
  •  0
  •   blhsing    6 年前

    functools.reduce :

    from functools import reduce
    print(list(reduce(lambda a, b: a + b[len(a):], [a, b, c, d])))
    

    这将输出:

    [1, 2, 3, 8, 6, 7]