如何經過列表推導式合併兩個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/...索引

相關文章
相關標籤/搜索