Appending to the rows of a table

前端 未结 7 1854
南方客
南方客 2020-12-05 08:25

I have a two dimensional list and a one dimensional list. I would like to insert the 1D list into the 2D list as an additional column. For example:

array = {         


        
7条回答
  •  粉色の甜心
    2020-12-05 09:12

    For example:

     Transpose@Append[Transpose@array, column]
    

    You can also make is a function like so:

     subListAppend = Transpose@Append[Transpose@#1, #2] &;
     subListAppend[array, column]
    

    which makes it easier if you have to use it frequently. And of course if you want to insert at any place other than just the end you can use Insert[].

    subListInsert = Transpose@Insert[Transpose@#1, #2, #3] &;
    subListInsert[array, column, 2]
    --> {{a, x, 1, 2}, {b, y, 2, 3}, {c, z, 3, 4}}
    

    EDIT: Since the obligatory speed optimization discussion has started, here are some results using this and a 10000x200 array:

    ArrayFlatten@{{array, List /@ column}}:             0.020 s
    Transpose@Append[Transpose@array, column]:          0.067 s
    MapThread[Append, {array, column}]:                 0.083 s  
    MapThread[Insert[#1, #2, 4] &, {array, column}]:    0.095 s
    Map[Flatten, Flatten[{array, column}, {2}]]:        0.26 s
    ConstantArray based solution:                       0.29 s
    Partition[Flatten@Transpose[{array, column}], 4]:   0.48 s
    

    And the winner is ArrayFlatten!

提交回复
热议问题