python编码对网格的行和列求和

python编码对网格的行和列求和,python,Python,我试图在python编码中使用电子表格格式。 试图教我的初中学生如何从matrix.txt文件中读取表格并生成一组行和列。然后我想让他们看看每列的和是否与给定的和匹配,行是否相同。 下面是我在matrix.txt文件中输入的内容 3 3 7 2 5 14 6 3 1 10 3 9 8 20 16 14 14 这是我到目前为止已经构建的代码,但是我无法理解如何让程序计算每行的前三个(行数)整数之和。 希望有人能帮忙 k=[] with open('matrix.txt') as f: gri

我试图在python编码中使用电子表格格式。 试图教我的初中学生如何从matrix.txt文件中读取表格并生成一组行和列。然后我想让他们看看每列的和是否与给定的和匹配,行是否相同。 下面是我在matrix.txt文件中输入的内容

3 3
7 2 5 14
6 3 1 10
3 9 8 20
16 14 14
这是我到目前为止已经构建的代码,但是我无法理解如何让程序计算每行的前三个(行数)整数之和。 希望有人能帮忙

k=[]
with open('matrix.txt') as f:
  grid_data = [i.split() for i in f.readlines()]
for el in grid_data[0:]:
  for num in el[0]:
     k.append(num)
row=int(k[0])
for i in range(1,row):
  for el in grid_data[i]:
    print(sum(el[0:row-1])) 

如果有更好的方法解决这个问题,请让我知道。这是2014年以来新南威尔士编码公司的一个问题。我喜欢用python分析表格或网格的一种很酷的方法。

对于这样一个简单的问题,Numpy完全是过火了,需要你在年轻学生身上倾注大量额外的背景知识

我通常不喜欢填鸭式,但Python解决方案中的元素太多,很难用散文来解释,所以下面是代码:

with open('matrix.txt') as f:
    # Skip dims because redundant.
    f.readline()

    # Convert to int as we read.
    grid = [map(int, i.split()) for i in f]

# Define convenience vars (also for efficiency - rows is evaluated twice).
rows = grid[:-1]
totals = grid[-1]

# Verify row totals.
for (r, row) in enumerate(rows):
    assert sum(row[:-1]) == row[-1], 'row {}'.format(r)

# Verify column totals.
for (c, total) in enumerate(totals):
    assert sum(row[c] for row in rows) == total, 'col {}'.format(c)
编辑:这是一个非常好的用于转置数组的Python技巧。最终结果更加优雅:

# Replace convenience down with…

# Verify row totals.
for (r, row) in enumerate(grid[:-1]):
    assert sum(row[:-1]) == row[-1], 'row {}'.format(r)

# Verify column totals.
for (c, col) in enumerate(zip(*grid)[:-1]):
    assert sum(col[:-1]) == col[-1], 'col {}'.format(c)

唯一需要注意的是(也是我保留原稿的原因)它可能会爆炸普通初中生的大脑。小心使用。

对于这样一个简单的问题来说,Numpy完全是过火了,需要你在年轻学生身上花费大量额外的背景知识

我通常不喜欢填鸭式,但Python解决方案中的元素太多,很难用散文来解释,所以下面是代码:

with open('matrix.txt') as f:
    # Skip dims because redundant.
    f.readline()

    # Convert to int as we read.
    grid = [map(int, i.split()) for i in f]

# Define convenience vars (also for efficiency - rows is evaluated twice).
rows = grid[:-1]
totals = grid[-1]

# Verify row totals.
for (r, row) in enumerate(rows):
    assert sum(row[:-1]) == row[-1], 'row {}'.format(r)

# Verify column totals.
for (c, total) in enumerate(totals):
    assert sum(row[c] for row in rows) == total, 'col {}'.format(c)
编辑:这是一个非常好的用于转置数组的Python技巧。最终结果更加优雅:

# Replace convenience down with…

# Verify row totals.
for (r, row) in enumerate(grid[:-1]):
    assert sum(row[:-1]) == row[-1], 'row {}'.format(r)

# Verify column totals.
for (c, col) in enumerate(zip(*grid)[:-1]):
    assert sum(col[:-1]) == col[-1], 'col {}'.format(c)

唯一需要注意的是(也是我保留原稿的原因)它可能会爆炸普通初中生的大脑。请小心使用。

由于每行中的元素数不相同,因此matrix.txt文件似乎有问题。我假设这里是平方矩阵,像这样

3 3 0 0
7 2 5 14
6 3 1 10
3 9 8 20
16 14 14 0
然后,使用列表理解和转置概念的一个可能的解决方案是

结果是:

some of lines
6
28
20
40
44
sum of rows
35
31
28
44

您似乎在使用matrix.txt文件时遇到了问题,因为每行中的元素数不相同。我假设这里是平方矩阵,像这样

3 3 0 0
7 2 5 14
6 3 1 10
3 9 8 20
16 14 14 0
然后,使用列表理解和转置概念的一个可能的解决方案是

结果是:

some of lines
6
28
20
40
44
sum of rows
35
31
28
44

您是否允许使用其他库,如numpy/pandas?除了@gabijit关于使用numpy的评论之外:如果有时间,首先以这种方式使用它们(纯Python),然后展示如何使用numpy实现更简单、更优雅的操作。因为对于涉及数组/电子表格样式的任何类型的计算,numpy或pandas几乎总是一个比选项更好的选项,所以如果人们知道它,那就好了。学生们正在使用python的“Grok”界面屏幕,出于某种原因,我无法导入numpy?你知道为什么吗?它可以有另一个导入名称吗?你可以使用其他库,比如numpy/pandas吗?除了@Gabijit关于使用numpy的评论之外:如果有时间,先用这种方式(纯Python)导入它们,然后展示如何使用numpy实现更简单、更优雅的操作。因为对于涉及数组/电子表格样式的任何类型的计算,numpy或pandas几乎总是一个比选项更好的选项,所以如果人们知道它,那就好了。学生们正在使用python的“Grok”界面屏幕,出于某种原因,我无法导入numpy?你知道为什么吗?它可以有另一个导入名称吗?OP不仅仅需要每行的和(第一行是矩阵dims(不是必需的)),而是转置技巧的+1。因为我在回答中没有想到这一点而责怪自己。您不需要
列表(zip(*matrix))
<代码>邮政编码(*矩阵)就足够了。@Marcelo Cantos谢谢!关于zip(*矩阵)你是对的,事实上你对int的转换要好得多:)如果你愿意,请随时用我的答案更新你的答案,以便有更好的答案!OP不仅仅需要每一行的和(第一行是矩阵dims(不是必需的)),而是转置技巧的+1。因为我在回答中没有想到这一点而责怪自己。您不需要
列表(zip(*matrix))
<代码>邮政编码(*矩阵)就足够了。@Marcelo Cantos谢谢!关于zip(*矩阵)你是对的,事实上你对int的转换要好得多:)如果你愿意,请随时用我的答案更新你的答案,以便有更好的答案!踢我自己-sum(row[:-1])看起来很容易!!!但我仍然在使用此命令时出错-错误显示“map”对象不可下标。@user3864194:不确定原因。我根据您的输入运行了代码,它按原样工作。事实上,说实话,我有一个em破折号破坏了python,所以我现在用一个普通的连字符替换它,但这不能解释你的问题。@user3864194:我刚刚更正并简化了编辑:代码(也经过测试)。踢自己-sum(行[:-1])看起来很容易!!!但我仍然在使用此命令时出错-错误显示“map”对象不可下标。@user3864194:不确定原因。我根据您的输入运行了代码,它按原样工作。事实上,说实话,我有一个em破折号破坏了python,所以我现在用一个常规连字符替换它,但这不能解释你的问题。@user3864194:我只是更正并简化了EDIT:代码(也经过测试)。