Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取此错误:TypeError:只能将列表(而不是“int”连接到列表_Python_List_Typeerror - Fatal编程技术网

Python 获取此错误:TypeError:只能将列表(而不是“int”连接到列表

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]

我试着写这个程序来计算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]
        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
添加到该列表会产生错误,因为您无法将
+
运算符应用于列表和数字。