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|
如果你能解释一下你想算什么,也许我们可以帮助你
我是 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|
如果你能解释一下你想算什么,也许我们可以帮助你