Python 查找员工数据二维数组和部门数据二维数组之间的差距

Python 查找员工数据二维数组和部门数据二维数组之间的差距,python,arrays,Python,Arrays,嘿,伙计们,我使用的数据集有14列(部门ID、员工ID和一年中的月份),显示每个员工每月工作的小时数 我正在使用的职能部门需要为记录了某个月零值的员工打印行,而他/她的部门(作为一个整体)记录了非零值(即市场营销部门的John记录了5月份的零小时,当时部门总计为500小时,所以我们打印John的行) 我有两个助手函数:cost\u center\u sum(A),它接收2D数据数组(组织为列表列表),并将每个部门的累积小时数作为列表查找。第二个帮助函数,compcols(row,A),将“row

嘿,伙计们,我使用的数据集有14列(部门ID、员工ID和一年中的月份),显示每个员工每月工作的小时数

我正在使用的职能部门需要为记录了某个月零值的员工打印行,而他/她的部门(作为一个整体)记录了非零值(即市场营销部门的John记录了5月份的零小时,当时部门总计为500小时,所以我们打印John的行)

我有两个助手函数:
cost\u center\u sum(A)
,它接收2D数据数组(组织为列表列表),并将每个部门的累积小时数作为列表查找。第二个帮助函数,
compcols(row,A)
,将“row”的部门ID与数据集A中的相应行相匹配,并检查特定月份“row”中的零值是否对应于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) 

findgaps
将只
返回一次;第一次调用
compcols
后,函数结束:

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) # only ever returns once
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) # only ever returns once
def findgaps(A):
    X = cost_center_sum(A)
    for row in A:
        if any(month < 0.00001 for month in row[2:]):
            yield compcols(row, X)
def compcols(row, X):
    for dept_row in X:
        if row[0] == dept_row[0]:
            for emp_month, dep_month in zip(row[2:], dept_row[2:])
                if emp_month == 0 and dep_month != 0:
                    return row
    else:
        print "No match for department {0}.".format(row[0])