比较列功能

时间:2014-06-24 17:58:08

标签: python

我正在尝试用Python编写一个函数,它接受两个输入:

  • 列表列表中的单个列表(称为行)
  • 格式化为列表列表的2D数组(称为A)。

我希望函数找到行的第一个元素,并将它与A中具有相同第一个元素的行匹配。

然后该函数应该查看“row”的特定列中是否存在零,其中“A”的相同列中没有零

(例如:行的第5列有零,但A的第5列有26)。

如果不匹配,则该函数应打印该行。

下面是我正在使用的代码,但是我收到一个Index错误,说列表索引超出范围:

def compcols(row, A):
    for i in range(len (A)):
        for j in range(len(row)):
            if row[0]==A[i][0]:
                if row[j]==0 and A[i][j]!=0:
                    print row

Python专门列出了一行错误,如果row [j] == 0和A [i] [j]!= 0:“

2 个答案:

答案 0 :(得分:0)

也许就像这样

def compcols(row, A):
    for i in A:
        if row[0]==i[0]:
            for j, k in zip(row, i):
                if j==0 and k!=0:
                    print row

答案 1 :(得分:0)

因此,您获得的列表索引超出了该行if row[j]==0 and A[i][j]!=0:的范围。 j中的range(len(row))正在构建中,因此错误不应来自row[j]。在前一行中,您已经拥有if row[0]==A[i][0]:,因此它不应来自A [i]。

我怀疑它来自A[i]元素少row。您应该添加一个测试以确保:

def compcols(row, A):
    for i in range(len (A)):
        if (len(A[i]) < len(row):
            raise Exception("Line %d len(A[i]) %d - len(row) %d"
                            % (i, len(A[i]), len(row)))
        for j in range(len(row)):
            if row[0]==A[i][0]:
                if row[j]==0 and A[i][j]!=0:
                    print row