【问题标题】:Getting this error: TypeError: can only concatenate list (not "int") to list收到此错误:TypeError: can only concatenate list (not "int") to list
【发布时间】:2021-02-02 17:55:13
【问题描述】:

我正在尝试编写此程序来计算 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)

【问题讨论】:

  • 发布完整的回溯。
  • 错误几乎肯定来自sum = first_row + last_row+col_sumfirst_rowlast_row 是列表,col_sum 是一个数字。您希望该新增功能返回什么?
  • arr2d[1+i] 将在for 循环的最后一次迭代中出错。为什么要加 1?
  • 哦,对不起,我还在学习
  • first_rowlast_row 都是列表,而 col_sum 是一个数字。当应用于两个列表时,“+”运算符将它们连接成一个新的更长的列表,因此first_row + last_row 是一个列表。尝试将 col_sum 添加到该列表会产生错误,因为您无法将 + 运算符应用于列表和数字。

标签: python list typeerror


【解决方案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

循环不包含第一行和最后一行,因此您不会包含两次角。

【讨论】:

    【解决方案2】:

    所以您得到的错误是因为您试图将行(first_row 和 last_row)添加到标量 int 值(col_sum),因此无法添加连接列表而不是 int。

    要获得 2D 数组的周长,您可以将最后一行和第一行以及最后一列和第一列相加,然后在最后减去角落,除非有特定原因您不能这样做那。比如:

    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])
    

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 2021-08-31
      • 2022-11-01
      • 2020-09-25
      相关资源
      最近更新 更多