【问题标题】:How to interleave elements from two lists in python如何在python中交错两个列表中的元素
【发布时间】:2021-12-01 19:23:44
【问题描述】:
list1 = ["a", "b", "c"]
list2 = [1, 2, 3]

list3 = list1 + list2
print(list3)

output ---

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

但我想要这样的输出 ---

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

请帮帮我

【问题讨论】:

    标签: python list datetime


    【解决方案1】:

    您可以创建一个for 循环并使用zipextend

    list1 = ["a", "b", "c"]
    list2 = [1, 2, 3]
    
    list3 = []
    for items in zip(list1, list2):
        list3.extend(items)
    
    print(list3)
    

    或者一个列表推导(但是它更慢且可读性较差,仍然将它保留在这里只是为了了解如何处理必须在推导中扩展可迭代的情况)

    list1 = ["a", "b", "c"]
    list2 = [1, 2, 3]
    
    list3 = [c for items in zip(list1, list2) for c in items]
    print(list3)
    

    【讨论】:

    • 是的,对不起,nvm
    • 在两者中,for 循环更容易阅读,甚至可能更快。
    • @alani 确实,两者都计时了,循环速度更快,可读性更强,会改变答案的顺序
    • 我怀疑这两种不同的方法在性能方面存在重大差异。列表推导通常略微比等效循环快,主要是由于缓存了 .append 方法分辨率,这可以使用类似 append = result.append 的循环来完成
    • @juanpa.arrivillaga 好吧,timeit 表明循环稍微快一点,我的想法是一样的,它不使用嵌套循环(也许在内部它使用了一些循环机制,但那是然后可能在 c) 中完成
    【解决方案2】:
    from itertools import chain
    list1 = ["a", "b", "c"]
    list2 = [1, 2, 3]
    
    result = list(chain(*zip(list1, list2)))
    print(result)
    

    正如@juanpa.arrivillaga 所述,作为[更好] 的替代方案(因为您传递给.from_iterable() 的参数将被延迟评估):

    result = list(chain.from_iterable(zip(list1, list2)))
    

    【讨论】:

    • 你应该改用chain.from_iterable
    • @juanpa.arrivillaga,如文档中所述 - 它是一个替代构造函数。与*zip()相比,使用它有什么好处吗?不过,我更新了我的答案。
    • chain.from_iterable 迭代 zip 对象本身,而不必将整个序列扩展到内存中以便将每个元素传递给 chain
    • 是的,它说,懒惰地评估。我应该自己想出来的。谢谢,@chepner。
    • @buran 对,只是想让阅读本文的人清楚,我假设你完全理解
    【解决方案3】:

    蛮力合并将是这样的:

    list1 = ['a', 'b', 'c']
    list2 = [1, 2, 3]
    list3 = []
    
    ## merge two list with output like ['a',1,'b',2,'c',3]
    for i in range(len(list1)):
        list3.append(list1[i])
        list3.append(list2[i])
    
    print(list3)

    更好的方法是使用上面的itertool或chain!

    【讨论】:

    • 不要使用for i in range(len(list1))
    猜你喜欢
    • 2020-11-23
    • 2018-05-16
    • 2011-04-27
    • 1970-01-01
    • 2021-04-13
    • 2011-09-02
    • 2012-01-18
    • 2013-11-02
    • 2019-03-06
    相关资源
    最近更新 更多