Python for loop: IndexError: list index out of range

Python for loop: IndexError: list index out of range

我是 Python 的新手, 这是我的代码:

import numpy as np

x = [0, 0, 0, 0, 5, 0, 10, 5]
y = [4, 4, 4, 4, 9, 4, 2, 9]

def unitvector1 (x,y):
    looplim=(len(x)+1)

    for i in range (0,looplim):
        z=i+1
        alfa = np.arccos((x[i]*x[z])+(y[i]*y[z])) / ((np.sqrt(x[i] ^ 2+y[i] ^ 2) * np.sqrt(x[z] ^ 2+y[z] ^ 2))) 

        beta =+ (180-alfa)

    return (beta)

temp=unitvector1(x,y)

print(temp)

我收到这个错误:

IndexError: list index out of range

我试着用两个 for 循环来做,但没有成功。

非常需要您的帮助,非常感谢您的帮助。

列表是从 0 开始索引的,所以对于长度为 13 的列表,最后一个有效索引是 12,即比长度小 1。

当您执行 looplim=(len(x)+1) 然后 for i in range (0,looplim) 时,i 的最后一个值是 looplim-1 等于 len(x),所以它是长度而不是比那个少 1。

looplim=len(x) 
for i in range(looplim-1):
alfa = np.arccos((x[i]*x[z])+(y[i]*y[z])) / ((np.sqrt(x[i] ^ 2+y[i] ^ 2) * 
np.sqrt(x[z] ^ 2+y[z] ^ 2)))  

“alfa”的每次迭代值都是 nan

从 looplim=(len(x)+1) 和 z = i+1 中删除 + 1 然后 运行 代码 !

好的,首先你应该看看你的变量 z。当 i=7 z=8 且 x 数组中没有八位索引元素时。 其次,我不知道你为什么尝试“looplim”。如果你想以这种方式对 n 和 n+1 个元素进行操作,我们可以添加 next:

   def unitvector1 (x,y):
      for i in range (len(x)-1):
          z=i+1
          if z==len(x)+1:
              z=0
          alfa = np.arccos((x[i]*x[z])+(y[i]*y[z])) / ((np.sqrt(x[i] ^ 2+y[i] ^ 2) * np.sqrt(x[z] ^ 2+y[z] ^ 2))) 

          beta =+ (180-alfa)

    return (beta)

但是没用!因为 arccos(alpha) 应该有 alpha<|1|

如果你能解释一下你想算什么,也许我们可以帮助你