2014-06-23 48 views
1

所以我想添加一個二維數組的所有列除外陣列的前兩列。如果該行的總和大於或等於9且小於12,我希望該函數能夠打印該行。下面是我的二維陣列的一個示例列表:在二維數組(Python)的添加列

[[12606.000, 74204.000,  1.000,  1.000,  1.000,  1.000,  1.000,  0.000,  0.000],   
[12606.000, 105492.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  1.000],  
[12606.000, 112151.000,  1.000,  1.000,  0.000,  0.000,  0.000,  0.000,  0.000],  
[12606.000, 121896.000,  0.000,  0.000,  0.000,  0.000,  0.000,  1.000,  0.000]]  

(某些列已被刪除以進行格式化)。 這裏是我的代碼:

def sumBinRow(A): 
    """Returns the list of employees recording data for at least nine months and fewer than twelve. 
    """ 
    for i in range(len(A)): 
     for j in range(len(A[i])): 
      if 9 <= sum(A[i][j+2]) <12: 
       print A[i] 

我不斷收到「類型錯誤」的說法,「廉政」對象不是可迭代。

+0

作業問題? – wallacer

+0

類別。這是一個項目,我的實習 – user3758443

+0

我得到同樣的錯誤,當我嘗試:「在範圍Ĵ(12)」,以及 – user3758443

回答

1

基本上,你需要遍歷每個列表,每個列表,採取列表出發一片從2開始,然後總結並做你的比較。

def sumBinRow(A): 
    """Prints the list of employees recording data for at least nine months and fewer than twelve. 
    """ 
    for row in A: 
     if 9 <= sum(row[2:]) < 12: 
      print row 

或在1倍線的原因,爲什麼不:P

def sumBinRow(A): 
    """Prints the list of employees recording data for at least nine months and fewer than twelve. 
    """ 
    print [row for row in A if 9 <= sum(row[2:]) < 12] 
+1

想要建議的是相同的事情。雖然我會調整名稱和文檔字符串的功能實際上... – moooeeeep

+0

這個工程,並且超級簡單。非常感謝! – user3758443

0

你應該要總結這個樣子。

def sumBinRow(A): 
    """Returns the list of employees recording data for at least nine months and fewer than twelve. 
    """ 
    for i in range(len(A)): 
     sigma = 0 
     for j in range(2,len(A[i])): 
      sigma += A[i][j] 
      if 9 <= sigma <12: 
       print A[i] 
+0

我理解你的解決方案,真的很喜歡它,但是由於某種原因,函數返回有行全1 – user3758443

+0

[12227.0,38606.0,1,1,1,1,1,1,1,1,1,1,1, 1] [12227.0,38606.0,1,1,1,1,1,1,1,1,1,1,1,1] [12227.0,67307.0,1,1,1,1,1,1, 1,1,1,1,1,1] [12227.0,67307.0,1,1,1,1,1,1,1,1,1,1,1] – user3758443

0

如果使用NumPy此任務會更簡單,更快:

import numpy as np 

a = np.array([[12606.000, 74204.000,  1.000,  1.000,  1.000,  1.000,  1.000,  0.000,  0.000], 
       [12606.000, 105492.000,  0.000,  0.000,  0.000,  0.000,  0.000,  0.000,  1.000], 
       [12606.000, 112151.000,  1.000,  1.000,  0.000,  0.000,  0.000,  0.000,  0.000], 
       [12606.000, 121896.000,  0.000,  0.000,  0.000,  0.000,  0.000,  1.000,  0.000]]) 

b = a[:, 2:].sum(axis=1) 
check = (b >= 9) & (b < 12) 
print(a[check]) 
0

的問題是,你正在試圖總結過的東西是不是一個數組:

if 9 <= sum(A[i][j+2]) <12: // A[j][j+2] is not iterable, it is an int 

相反,你要使用slice功能:

if 9 <= sum(A[i][2:]) <12: // This will sum sum all but first two elements 

更爲pythonic的方式是使用list comprehension。這可以用一行代碼完成:

A = [[12606, 74204 , 1, 1, 1, 1, 1, 0, 0],   
    [12606, 105492, 0, 0, 0, 0, 0, 0, 1],  
    [12606, 112151, 1, 1, 0, 0, 0, 0, 0],  
    [12606, 121896, 0, 0, 0, 0, 0, 1, 0]] 

print [row for row in A if 9 <= sum(row[2:]) < 12]