我正在尝试将名为数据的 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)]
答案 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]]