Python row.count错误

时间:2011-12-26 19:20:43

标签: python

我对python很新,不知道我在做什么,但我正在尝试学习,因为这是我过去用C,C ++和Cocoa所做的。

我正在编写一个带矩阵的程序。我想计算x的出现次数(x是我矩阵中的一个值。)当我尝试这样做时虽然我不确定我得到了什么。我正在寻找一个很好的解释,我正在获得什么以及如何用矩阵做事。最后我还想使用matrix.insert,matrix.tofile和matrix.remove命令。任何形式的帮助表示赞赏。

这是我的代码:

    matrix = [
    [2, 9, 7, 5, 8, 9, 2, 4, 6],
    [8, 1, 1, 8, 4, 7, 5, 1, 3],
    [5, 5, 7, 7, 9, 3, 8, 1, 5],
    [1, 7, 8, 8, 2, 6, 4, 5, 9],
    [3, 8, 6, 3, 1, 7, 4, 9, 6],
    [9, 5, 4, 5, 9, 4, 2, 2, 3],
    [1, 2, 5, 9, 7, 9, 6, 1, 1],
    [7, 5, 8, 3, 2, 6, 9, 1, 5],
    [3, 1, 9, 6, 7, 8, 5, 3, 4],
    ]
for sublist in matrix:
    S = str(sublist)
    print (S)
for row in matrix:
    A = row.count(0)
    B = row.count(1)
    C = row.count(2)
    D = row.count(3)
    E = row.count(4)
    F = row.count(5)
    G = row.count(6)
    H = row.count(7)
    I = row.count(8)
    J = row.count(9)
    print (A)
for row in matrix:
    if A > 0:
        if B < 1:
            print (B)

这是我运行程序时得到的结果:

[2, 9, 7, 5, 8, 9, 2, 4, 6]
[8, 1, 1, 8, 4, 7, 5, 1, 3]
[5, 5, 7, 7, 9, 3, 8, 1, 5]
[1, 7, 8, 8, 2, 6, 4, 5, 9]
[3, 8, 6, 3, 1, 7, 4, 9, 6]
[9, 5, 4, 5, 9, 4, 2, 2, 3]
[1, 2, 5, 9, 7, 9, 6, 1, 1]
[7, 5, 8, 3, 2, 6, 9, 1, 5]
[3, 1, 9, 6, 7, 8, 5, 3, 4]
0
0
0
0
0
0
0
0
0

谢谢!

1 个答案:

答案 0 :(得分:4)

你不是在这里得到一个“矩阵”,它实际上是一个列表列表。

您从for row in matrix区块获得的是特定号码发生的次数,首次说9。除了出现0之外,您还没有打印任何其他值。

list.insert(i, v)将允许您在特定索引v处添加新值i。如果您想在列表中的其他元素之前或之后插入某些内容,这将非常有用。

没有list.tofile()方法;您必须将每个单独的行写入文件。您应该查看文件对象,以及如何在Python文档中写入文件。

list.remove(v)将删除列表中v第一次出现

在您的上一个for row in matrix区块中,不会打印任何内容;变量AJ仅将本地化到前一个循环块。您可以通过将两个语句添加到上一个循环的末尾来进行调整,如下所示:

for row in matrix:
    A = row.count(0)
    B = row.count(1)
    C = row.count(2)
    D = row.count(3)
    E = row.count(4)
    F = row.count(5)
    G = row.count(6)
    H = row.count(7)
    I = row.count(8)
    J = row.count(9)
    print (A)
    if A > 0:
        if B < 1:
            print (B)

如果您有兴趣了解更多列表,则应仔细阅读documentation,并查看一些教程。还有一些免费的电子书 - 其中一个是Dive into Python 3 - 这是一个很好的资源。


编辑:再看看你的代码,我发现你实际上从未打印过B.因为你的“矩阵”中的零数量永远不会超过零,你就不会打印掉B.也许在你的原始问题,你可以从结果中说明你想要的更清楚一点吗?如果您的矩阵在其任何行中包含非零值,则永远不会打印B.