Python 获取此错误:TypeError:只能将列表(而不是“int”连接到列表
我试着写这个程序来计算2d列表的周长(基本上把它当作一个矩形),我一直得到这个错误。我还需要一些帮助来弄清楚如何在不添加两次角的情况下对“矩形”的列求和。提前谢谢你的帮助Python 获取此错误:TypeError:只能将列表(而不是“int”连接到列表,python,list,typeerror,Python,List,Typeerror,我试着写这个程序来计算2d列表的周长(基本上把它当作一个矩形),我一直得到这个错误。我还需要一些帮助来弄清楚如何在不添加两次角的情况下对“矩形”的列求和。提前谢谢你的帮助 def perimeter_sum(arr2d): col_sum=0 first_row=arr2d[0] last_row=arr2d[-1] for i in range(len(arr2d)): col_sum=arr2d[1+i][0]+arr2d[1+i][-1]
def perimeter_sum(arr2d):
col_sum=0
first_row=arr2d[0]
last_row=arr2d[-1]
for i in range(len(arr2d)):
col_sum=arr2d[1+i][0]+arr2d[1+i][-1]
sum = first_row + last_row+col_sum
return sum
a2d = [[1,2,3,4],[5,6,7,9],[9, 0, 1,2]] #error occurred here
perimeter_sum(a2d)
因此,您得到的错误是因为您试图将行(第一行和最后一行)添加到标量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])
您可以使用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
循环不包括第一行和最后一行,因此不会包含两次角点。发布完整的回溯。错误几乎肯定来自
sum=first\u row+last\u row+col\u sum
<代码>第一行和最后一行是列表,列和是数字。您希望加法返回什么?arr2d[1+i]
将在for
循环的最后一次迭代中出错。为什么要加1?哦,我明白了,对不起,我还在学习first\u row
和last\u row
都是列表,而col\u sum
是一个数字。当应用于两个列表时,“+”运算符将它们连接成一个新的更长的列表,因此第一行+最后一行
是一个列表。尝试将col\u sum
添加到该列表会产生错误,因为您无法将+
运算符应用于列表和数字。