2 回答
TA贡献1776条经验 获得超12个赞
所以你得到的错误是因为你试图将行(first_row和last_row)添加到标量int值(col_sum),因此无法添加连接列表而不是int。
要获得二维数组的周长,您可以将最后一行和第一行以及最后一列和第一列相加,然后减去最后的角点,除非有特定原因不能这样做。就像是:
def perimeter_sum(arr2d):
first_row = sum(arr2d[0])
last_row = sum(arr2d[-1])
first_col = sum([arr2d[i][0] for i in range(len(arr2d))])
last_col = sum([arr2d[i][-1] for i in range(len(arr2d))])
# sum with double counted corners
s = sum([first_row, last_row, first_col, last_col])
# decrement once for each corner
return (s - arr2d[0][0] - arr2d[0][-1] - arr2d[-1][0] - arr2d[-1][-1])
TA贡献1900条经验 获得超5个赞
您可以使用它sum()来获取列表的总计。用它来求第一行和最后一行的总和。然后循环遍历中间行并添加第一个和最后一个元素。
def perimiter_sum(arr2d):
sum = sum(arr2d[0]) + sum(arr2d[-1])
for row in arr2d[1:-2]:
sum += row[0] + row[-1]
return sum
该循环不包括第一行和最后一行,因此您不会两次包含角点。
添加回答
举报