【问题标题】:Typeerror: must be real number, not list类型错误:必须是实数,而不是列表
【发布时间】:2019-07-30 18:26:16
【问题描述】:

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

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 不是列表。我不确定是什么错误

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

【问题讨论】:

  • 了解S 中的内容会有所帮助。
  • S 和 P 是元组列表。 S=[(1,2),(3,4),(-1,1),(6,-7),(0, 6),(-5,-8)] P=[(3,- 4)]
  • 定义 nr 的行是一个列表推导式,这意味着 nr 是一个列表。它在抱怨,因为你不能做一个列表。尝试做 print(type(nr))。

标签: python-3.x list trigonometry


【解决方案1】:
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])

【讨论】:

  • @asspsss 太好了,您介意接受答案吗?
  • 答案没有错,但是并没有解决像这种情况下处理变量列表的问题
  • @GeorgiIvanovDimitrov OP 要求“帮助理解这一点”,并做出了“nr 不是列表”的错误断言,所有这些都由这个答案解释。 OP 没有询问如何处理作为多元素列表的“nr”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 2018-03-11
  • 2020-05-07
  • 2013-12-24
  • 2022-11-27
  • 2016-11-13
  • 1970-01-01
相关资源
最近更新 更多