【问题标题】:Merge two arrays in a zipper pattern以拉链模式合并两个数组
【发布时间】:2020-12-07 16:55:28
【问题描述】:

假设我有两个数组 [1, 3, 5] 和 [2, 4, 6], 什么是合并它们以产生 [1, 2, 3, 4, 5, 6] 而不使用循环或递归而只是 numpy 的最佳方法?

【问题讨论】:

    标签: python numpy concatenation numpy-ndarray


    【解决方案1】:

    不用numpy也可以:

    只需添加它们,a = [1,3,5]+[2,4,6],然后对它们进行排序sorted(a)

    【讨论】:

    • 我认为 OP 想要的是一种从每个输入列表中生成交错值列表或数组的方法,而不是对它们进行排序的方法。
    • 我也是这么理解的
    【解决方案2】:

    既然你标记了numpy

    np.array((a,b)).T.ravel()
    

    或者当a,b 的大小可能不同时:

    np.array(list(zip(a,b))).ravel()
    

    输出:

    array([1, 2, 3, 4, 5, 6])
    

    【讨论】:

      【解决方案3】:

      在纯python中你可以使用

      import itertools
      list(itertools.chain(*zip(array1, array2)))
      

      【讨论】:

        【解决方案4】:

        你也可以使用列表推导:

        [x for t in zip(a,b) for x in t]
        

        请注意,这等效于相同顺序的显式循环

        out = []
        for t in zip(a,b):
           for x in t:
               out.append(x)
        

        【讨论】:

          【解决方案5】:
          a = [1, 3, 5]
          b = [2, 4, 6]
          sorted([*a, *b])
          

          输出:

          [1, 2, 3, 4, 5, 6]
          

          【讨论】:

            猜你喜欢
            • 2015-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-22
            • 2011-09-25
            • 1970-01-01
            • 2017-11-14
            • 1970-01-01
            相关资源
            最近更新 更多