嗨,我正在處理一個數據集,它有14列(部門編號,員工編號和一年的月份),顯示每個員工工作多少小時每個月。查找員工數據二維數組和二維數組二維數組之間的差距
我正在使用的函數需要打印出員工的行,當他/她的部門(整體)記錄一個非零值時(例如,在市場營銷記錄爲零5月份的時間爲500小時,所以我們打印約翰的行)。
我有兩個幫助函數:cost_center_sum(A)
它接收二維數據數組(組織爲列表的列表),並將每個部門的累積小時數作爲列表的列表。第二個輔助函數compcols(row, A)
將部門ID「row」與數據集合A中的相應行匹配,並檢查特定月份的「行」中的零值是否對應於該行中同一月份的零行在A中匹配。
我試着將這兩個函數編譯到函數findgaps(A)
中,該函數輸出一個員工的僱員信息,該僱員在部門記錄一個非零值的月份中記錄一個零。
下面是我上面描述的功能代碼:
def compcols(row, A):
for i in range(len(A)):
if len(A[i]) < len(row):
print row, (" - beware : line %d len(A[i]) %d < len(row) %d"
%(i, len(A[i]), len(row)))
else:
if row[0]==A[i][0]:
for j in range(len(row)):
if row[j]==0 and A[i][j]!=0:
print row
break
NUMBER_OF_MONTHS = 12
def cost_center_sum(A):
dep = dict()
for row in A:
if row[0] not in dep:
dep[row[0]] = [0.0 for x in xrange(NUMBER_OF_MONTHS)]
for i in xrange(NUMBER_OF_MONTHS):
dep[row[0]][i] += row[i+2]
ret = list()
for department in sorted(dep.iterkeys()):
x = [department]
x.extend(dep[department])
ret.append(x)
return ret
def findgaps(A):
X=cost_center_sum(A)
for i in range(len(A)):
for j in range(len(A[0])):
if A[i][j] < 0.00001:
return compcols(A[i],X)
我已經測試過的其他功能,他們似乎做他們的工作相當好(有在compcol
一個小錯誤,其打印出來的一樣線幾次),但是當我使用findgaps
功能,它提供的僅一個僱員行印刷80次完全不正確的輸出:
[10017.0, 93454.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.6, 0.0] - beware : line 76 len(A[i]) 13 < len(row) 14
[10017.0, 93454.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.6, 0.0] - beware : line 77 len(A[i]) 13 < len(row) 14
[10017.0, 93454.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.6, 0.0] - beware : line 78 len(A[i]) 13 < len(row) 14
[10017.0, 93454.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.6, 0.0] - beware : line 79 len(A[i]) 13 < len(row) 14
[10017.0, 93454.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.6, 0.0] - beware : line 80 len(A[i]) 13 < len(row) 14