首页 > 解决方案 > 如何修复错误?TypeError: 不支持的操作数类型 -: 'tuple' 和 'int'

问题描述

我有一个任务:给定一个数组 a0, a1,…, an − 1。对于每个元素,找到从它到最近零的距离。保证零在数组中至少出现一次。

输入数据 输入的第一行包含一个整数 n (1≤n≤2⋅105) - 数组 a 的长度。第二行包含数组的元素,以空格分隔(-109≤ai≤109)。

输出 打印序列 d0, d1,…, dn − 1。di 值必须等于从位置 i 的元素到最近的零元素的距离。

这是我的解决方案:

n=int(input())
a=list(map(int, input().split())) 
b = [i for i in range(len(a)) if a[i] == 0]
print(*[min(abs(i - j) for j in b) for i in enumerate(a)])

但是我收到错误 TypeError: unsupported operand type(s) for -: 'tuple' and 'int'。我怎么解决这个问题?怎么写不一样?

标签: pythonpython-3.xalgorithm

解决方案


该函数enumerate返回一个导致TypeError. 您可以只保留一个占位符变量将元组分成 i 和另一个占位符变量,如下所示:

print(*[min(abs(i - j) for j in b) for i,_ in enumerate(a)])

或者,根本不使用enumerate

print(*[min(abs(i - j) for j in b) for i in range(n)])

推荐阅读