2010-02-05 26 views
8

我有一個2d數組,我想將列設置爲特定值,我的代碼如下所示。這是在Python中最好的方式嗎?Python - 將2d數組中的列設置爲特定值的最佳方法

rows = 5 
cols = 10 

data = (rows * cols) *[0] 
val = 10 
set_col = 5 

for row in range(rows): 
    data[row * cols + set_col - 1] = val 

如果我要列數設置爲特定值,我怎麼能擴展此

我想用Python標準庫只

感謝

+6

我知道你想只有標準庫,但numpy的是爲這個做。 – telliott99 2010-02-05 13:36:25

回答

11

一個更好的解決辦法是:

data = [[0] * cols for i in range(rows)] 

對於cols = 2值,rows = 3我們會得到:

data = [[0, 0], 
     [0, 0], 
     [0, 0]] 

然後你就可以訪問它:

v = data[row][col] 

導致:

val = 10 
set_col = 5 

for row in range(rows): 
    data[row][set_col] = val 

還是更Python(感謝J.F.塞巴斯蒂安):

for row in data: 
    row[set_col] = val 
+5

沒有必要使用顯式行索引:'用於行中的數據:\ n row [col_index] = value' – jfs 2010-02-05 13:08:20

0

有因爲您正在設置一個列,因此您可以更清楚地指定變量set_col而不是set_row

所以設置了一些列的,只是另一個循環包裝它:

for set_col in [...columns that have to be set...] 

一個問題,雖然:在它的包裝在一維數組(Python可以支持通過二維數組的二維數組是不尋常列表的列表),所以我會用方法或函數來包裝它。

+0

Thiks eli,我糾正了這個問題 – mikip 2010-02-05 13:06:26

0

在你的情況的行和列可能是可以互換的,即它的語義哪個是哪個的問題。如果是這種情況,那麼你可以把列佔據細胞的序列中data列表中,然後零它們只使用:

data[column_start:column_start+rows] = rows * [0] 
0

較早的答案留給了range,所以你可以嘗試以下方法:

cols = 7 
rows = 8 

data = [[0] * cols for i in range(rows)] 

val = 10 
set_col = 5 

for row in data: 
    row[set_col] = val 

將其擴展到您可以存儲列號的列數,它的值爲dict。所以設定式柱5至10和列2至7:

cols = 7 
rows = 8 

data = [[0] * cols for i in range(rows)] 

valdict = {5:10, 2:7} 

for col, val in valdict.items(): 
    for row in data: 
     row[col] = val 

交換行和列,如在另一個答案提示,使這稍微簡單:

cols = 7 
rows = 8 

data = [[0] * rows for i in range(cols)] 

valdict = {5:10, 2:7} 

for col, val in valdict.items(): 
    data[col] = [val] * rows 
26

NumPy包提供了強大的N-二維數組對象。如果datanumpy陣列然後set_col列設置爲val值:

data[:, set_col] = val 

完整的例子:

>>> import numpy as np 
>>> a = np.arange(10) 
>>> a.shape = (5,2) 
>>> a 
array([[0, 1], 
     [2, 3], 
     [4, 5], 
     [6, 7], 
     [8, 9]]) 
>>> a[:,1] = -1 
>>> a 
array([[ 0, -1], 
     [ 2, -1], 
     [ 4, -1], 
     [ 6, -1], 
     [ 8, -1]]) 
+0

我把我的答案保留在標準庫的範圍內,但是我不得不說這是數組的非平凡使用的正確方法。 – 2010-02-05 15:56:51

+0

特別是,您可以輕鬆地進行多列分配。例如,a [:,[0,2]] + = [3,5] – telliott99 2010-02-05 17:06:57

相關問題