Python 3.x Typeerror:必须是实数,而不是列表

Python 3.x Typeerror:必须是实数,而不是列表,python-3.x,list,trigonometry,Python 3.x,List,Trigonometry,我想得到一个数的余弦倒数。但它显示了一条错误消息 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) 最后一条语句抛出错误“必须是实数,而不是列表” 然而,nr不是一个列表。我不确定是什么错误 请帮助理解这一点。提前谢谢 nr=[((i[0]*p)+(i[1]*q

我想得到一个数的余弦倒数。但它显示了一条错误消息

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)
最后一条语句抛出错误“必须是实数,而不是列表” 然而,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是一个列表。它在抱怨,因为你不能做一个列表


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

了解
S
中的内容会有所帮助。S和p是元组列表。S=[(1,2),(3,4),(-1,1),(6,-7),(0,6),(-5,-8)]P=[(3,-4)]定义nr的行是列表理解,意思是nr是列表。它在抱怨,因为你不能做一个列表。尝试打印(键入(nr))。@asspsss太好了,您介意接受答案吗?答案没有错,但无法解决在以下情况下处理变量列表的问题:this@GeorgiIvanovDimitrovOP要求“帮助理解这一点”,并错误地断言“nr不是列表”,所有这些都可以用这个答案来解释。OP没有询问如何处理“nr”是一个多元素列表。