【问题标题】:Python: Intertwining two listsPython:交织两个列表
【发布时间】:2011-09-15 09:50:17
【问题描述】:

执行以下操作的pythonic方式是什么:

我有两个列表a 和b,长度相同n,我想组成列表

c = [a[0], b[0], a[1], b[1], ..., a[n-1], b[n-1]]

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:
    c = [item for pair in zip(a, b) for item in pair]
    

    阅读有关 zip 的文档。


    要与 Ignacio 的答案进行比较,请参阅此问题:How do I convert a tuple of tuples to a one-dimensional list using list comprehension?

    【讨论】:

      【解决方案2】:
      c = list(itertools.chain.from_iterable(itertools.izip(a, b)))
      

      【讨论】:

        【解决方案3】:
        c = [item for t in zip(a,b) for item in t]
        

        【讨论】:

          【解决方案4】:
          c = [item for i in zip(a,b) for item in i]
          

          您也可以尝试:

          c=[(a,b)[i%2][i/2] for i in xrange(2*n)]
          

          当然可读性较差

          【讨论】:

            【解决方案5】:

            这是另一种方式:

            sum(([x,y] for (x,y) in zip(a,b)), [])
            

            (可能效率不高,因为您同时形成了临时元组 (x,y) 和临时列表 [x,y]。)

            【讨论】:

              【解决方案6】:

              这个怎么样(在 Python 2 和 3 上测试):

              list(sum(zip(a, b), ()))
              

              或在 numpy 中:

              import numpy as np
              np.vstack((a, b)).T.flatten().tolist()
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-07-17
                • 2018-01-02
                • 2016-04-02
                • 2013-01-24
                相关资源
                最近更新 更多