Typeerror: must be real number, not list

Typeerror: must be real number, not list

我正在尝试获取数字的余弦倒数。但它显示错误消息

for i in S:
    nr=[((i[0]*p)+(i[1]*q))/(math.sqrt(i[0]**2+i[1]**2)*math.sqrt(p**2+q**2)) for (p,q) in P]
    print(nr)
    dist=math.acos(nr)

最后一条语句抛出错误"must be real number, not list" 但是, nr 不是列表。我不确定错误是什么

请求帮助理解这一点。提前致谢

nr=[((i[0]*p)+(i[1]*q))/(math.sqrt(i[0]**2+i[1]**2)*math.sqrt(p**2+q**2)) for (p,q) in P]

这是一个列表推导,意思是nr是一个列表。它在抱怨,因为你不能做列表的 acos。

正如您在评论中所说,P 是一个单元素列表,因此您的 nr 列表仅包含一个元素,但它仍然是一个列表。尝试做 math.acos(nr[0])