我正在尝试在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方法分析表格或网格。
答案 0 :(得分:3)
对于这样一个简单的问题,Numpy完全矫枉过正,并要求你向年轻学生抛弃一大堆额外的背景知识。
我一般不喜欢用勺子喂食,但是有太多的元素可以用pythonic解决方案在散文中解释,所以这里是代码:
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)
编辑: Blue reminded me用于转置数组的非常好的pythonic技巧。最终结果更优雅:
# 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)
唯一的警告(以及我保留原始原封的原因)是它可能会爆炸普通的初中级大脑。请谨慎使用。
答案 1 :(得分:1)
您似乎对matrix.txt文件有问题,因为您在每行中没有相同数量的元素。我在这里假设方阵,就像这个
3 3 0 0
7 2 5 14
6 3 1 10
3 9 8 20
16 14 14 0
然后使用列表理解和转置概念(可能是学生的教学好处)的可能解决方案是这个
with open("matrix.txt") as f:
content = f.readlines()
# convert matrix data to integers
matrix = [[int(i) for i in line.split()] for line in content]
# sum the rows
print('sum of lines')
for line in matrix:
print(sum(line))
# transpose the matrix
transpose_matrix = list(zip(*matrix))
# do the same with the transposed matrix
print('sum of rows')
for line in transpose_matrix:
print(sum(line))
结果如下:
some of lines
6
28
20
40
44
sum of rows
35
31
28
44