在Python编写算法时出现“类型对象不可下标”错误
我正在尝试把我的算法转换成Python代码。这个算法如下:
For i = 1 To n
For j = 1 To (m - 1)
del1 = C(i - 1, j) - C(i - 1, j - 1)
del2 = C(i - 1, j + 1) - C(i - 1, j)
If del2 = 0 Then
r = 0
Else
r = del1 / del2
End If
Next i
我试着一步一步把上面的代码块转换成Python代码。对于del1,我尝试写成如下的Python代码:
del1 = [[C[i-1,j]-C[i-1,j-1] for j in range(1,(m-1))]for i in range [0,int(n)]]
但是我遇到了一个错误,提示TypeError: 'type' object is not subscriptable。有没有人能给我一些建议,告诉我如何把上面的算法转换成Python代码呢?
编辑:
C = [[0 for j in range(0,int(m))]for i in range(0)]
C = [[1 for i in range(0,int(n))]for j in range(0)]
谢谢。
Jdbaba
3 个回答
0
在Python中,方括号[]里的东西叫做可下标访问的,也就是代表数组的概念。
但是在循环中,我们可能会用到range这个东西,这时候可能会不小心把方括号[]写成圆括号()。
range的值并不是以数组的形式存在,也不是可以分开的元素。
所以,解决这个问题的办法就是把方括号[]改成圆括号(),然后再运行代码。
0
看起来你想要的是 range(0,int(n))
。
3
应该是:
del1 = [[C[i-1,j]-C[i-1,j-1] for j in range(1,(m-1))]for i in range(0,int(n))]
[]
-> ()
在最后一个 range
上
上面的写法适用于 C
是像 numpy
数组这样的东西,它支持多维切片。如果 C
是一个列表的列表,那么下面的写法应该可以用:
del1 = [[C[i-1][j]-C[i-1][j-1] for j in range(1,(m-1))]for i in range(0,int(n))]