将列添加到数组的Pythonic方法

时间:2015-10-28 21:57:53

标签: python arrays list

我正在尝试将名为数据 m x n 数组与 m 元素列表结合起来名为 cluster_data ,以便列表 cluster_data 中的每个元素都被附加为 data 中每一行的最后一个元素。

作为一个例子,我想要结合

data = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]

cluster_data = [1,2,3,4,5]

这样

final_data = [[1,2,3,4,1],[5,6,7,8,2],[9,10,11,12,3],[13,14,15,16,4],[17,18,19,20,5]]

我已经编写了一些代码来执行此操作,但我希望有更多的Pythonic方法。

data_with_clusters = []    
for i, row in enumerate(data):
    row.append(cluster_data[i])
    data_with_clusters.append(row)

到目前为止,我最好的猜测是:

data_with_clusters = [row.append(cluster_data[i]) for i, row in enumerate(data)]

4 个答案:

答案 0 :(得分:5)

我认为这是最蟒蛇的方式

final_data = [i+[j] for i,j in zip(data, cluster_data)]

答案 1 :(得分:2)

您的方法存在的问题是append不返回任何内容。

而不是追加,合并列表:

[row + [cluster_data[i]] for i, row in enumerate(data)]

[e[0] + [e[1]] for e in zip(data, cluster_data)]

答案 2 :(得分:2)

Pythonic方式首先使用Array第一件事。列表通常被滥用为array,因为它们有一些相似之处。

但更多Pythonic方式,如果你经常使用数字就是使用NumPy。这使得这样的操作变得轻而易举。

前面给出的列表理解答案也很好,但是对于大型数组来说它们会非常慢。

以下是您对NumPy的介绍:

In [2]: import numpy as np
In [3]: array = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]])

In [3]: array
Out[3]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20]])

In [4]: col = np.array([[1],[2],[3],[4],[5]])
In [4]: col
Out[4]: 
array([[1],
       [2],
       [3],
       [4],
       [5]])

In [5]: np.append(array, col, axis=1)
Out[5]: 
array([[ 1,  2,  3,  4,  1],
       [ 5,  6,  7,  8,  2],
       [ 9, 10, 11, 12,  3],
       [13, 14, 15, 16,  4],
       [17, 18, 19, 20,  5]])

答案 3 :(得分:1)

row.append(cluster_data[i])返回None,因此无效,

请改为:row + [cluster_data[i]]