如何经过列表推导式合并两个list?

如何合并两个长度相等的list?

示例:git

  • 输入:github

    • list1: [1, 2, 3]
    • list2: ['a', 'b', 'c']
  • 输出:数组

    • [1, 'a', 2, 'b', 3, 'c']

方案1: 遍历两个数组

def interleave_by_loop(list1, list2):
    if len(list1) != len(list2):
        raise ValueError("传入的list的长度须要相等")

    new_list = []
    for index, value in enumerate(list1):
        new_list.append(value)
        new_list.append(list2[index])
    return new_list


list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

if __name__ == "__main__":
    print(interleave_by_loop(list1, list2))
    # [1, 'a', 2, 'b', 3, 'c']

上面给出了一个简单的示例,就是经过一次带有索引for循环
每次循环中将两个list中对应的元素插入新的list。app

上面的方法多是个比较通用的作法,可是在Python中能够写的简洁一点函数

方案2

def interleave(list1, list2):
    return [val for pair in zip(list1, list2) for val in pair]


list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

if __name__ == "__main__":
    print(interleave(list1, list2))
    # [1, 'a', 2, 'b', 3, 'c']

这里,咱们首先观察下代码,首先oop

  • zip(list1, list2) 把两个列表合并成一个元组列表
  • 而后咱们经过for循环获得一个个元组
  • 最后把元组解析成咱们的列表

其实,咱们还能够修改下咱们的函数,使得咱们的函数更加具备通用性google

def interleave(*args):
    return [val for pair in zip(*args) for val in pair]


list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = ['github', 'google.com', 'so']

if __name__ == "__main__":
    print(interleave(list1, list2, list3))
    # [1, 'a', 'github', 2, 'b', 'google.com', 3, 'c', 'so']

这样咱们的函数就能够接受任意多个列表了!code

https://github.com/fish-bugs/...索引

相关文章
相关标签/搜索