【问题标题】:Comparing Columns Function比较列功能
【发布时间】:2014-06-24 17:58:07
【问题描述】:

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

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

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

然后该函数应该查看“行”的特定列中是否有零,而“A”的同一列中没有零

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

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

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

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 专门列出了一个错误,其中包含“if row[j]==0 and A[i][j]!=0:”这一行

【问题讨论】:

  • 它指定了什么错误?

标签: python


【解决方案1】:

可能是这样的

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

【讨论】:

    【解决方案2】:

    所以你得到一个列表索引超出了该行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
    

    【讨论】:

    • 关于 A[i] 的元素比行少(它少一个)是正确的,但是,当我尝试使用您的修改时,出现以下错误
    • 回溯(最近一次调用最后):文件“”,第 1 行,在 compcols(x, y) 文件“C:\Users\nbhambi\Desktop\AmgenProgram .py",第 15 行,在 compcols 中 if len(A[i])
    • 我认为row 是一个列表(应该有一个 len),A 是一个列表列表,所以 A[i] 应该是一个列表......你用什么来称呼 compcols?跨度>
    • 没关系,我只是在装傻。但它确实在循环中多次打印出行,当我尝试将其从其中一个 for 循环中取出时,我得到一个意外的缩进错误。有什么建议吗?
    • 如果您复制和粘贴代码,可能会混合使用制表符和空格?
    猜你喜欢
    • 2013-02-26
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2020-09-07
    相关资源
    最近更新 更多