'NoneType'对象没有属性'__getitem__'4

时间:2018-01-23 10:13:03

标签: python list return-value reverse

from collections import deque
def muladd(f1,f2_inv):
    global ans 
    for j in f1:
        ans = f1[j]*f2_inv[j]

f1 = [2,3,7,5,4,0,0,0,0,0,0,0,0]
f2 = [0,0,0,0,8,7,6,5,9,0,0,0,0]

conv = [0,0,0,0,0,0,0,0,0]
f2_inv = f2.reverse()

for i in conv:
    conv[i]= muladd(f1,f2_inv)
    print conv[i]
    f1.rotate(1)
​

我无法运行代码。

当我运行此代码时,我收到错误:

'NoneType' object has no attribute '__getitem__'

2 个答案:

答案 0 :(得分:2)

像许多在列表上操作的方法一样,

reverse()不会返回任何内容,而是就地修改列表。所以f2是无。您应该使用独立的reversed()功能。

f2_inv = list(reversed(f1))

或切片:

f2_inv = f1[::-1]

(注意,此代码还存在其他问题,例如,i在循环中始终为0,因为您只迭代0的列表。)

答案 1 :(得分:0)

在你的循环中

for i in conv:
  conv[i]= muladd(f1,f2_inv)
  print conv[i]
  f1.rotate(1)

i将是一个对象(它遍历conv的所有对象,因此i是一个对象而不是索引号)。这样您就无法使用conv[i]。要使用i作为索引,请使用:

for i in range(len(conv)):
  conv[i]= muladd(f1,f2_inv)
  print conv[i]
  f1.rotate(1)

(这不是导致错误的原因,但如果您的错误被解决,则会导致问题,因为conv[i]始终为conv[0],因为i0而是当前索引号)