【问题标题】:How to divide list of lists by another list of lists in Python?python - 如何将列表列表除以Python中的另一个列表列表?
【发布时间】:2016-10-11 04:39:54
【问题描述】:

我有q = [[7,2,3],[4,5,6]]r=[[6,1,2],[3,4,5]]。我需要将 q 除以 r 中的相应元素。 (即[[7/6,2/1,3/2],[4/3,5/4,6/5]]

需要输出 B = [[1.16,2,1.5],[1.33,1.25,1.2]]

代码:

B= [[float(j)/float(i) for j in q] for i in r]

但是,我不断收到错误消息:TypeError: float() 参数必须是字符串或数字。我从未来导入了师。有什么建议么?

【问题讨论】:

  • 您需要遍历 子列表中的值,而不是子列表本身。现在您正在尝试将列表转换为浮点数...
  • numpy 会为你做这件事!
  • 我不习惯使用 numphy,对此代码有什么建议吗?

标签: python algorithm list floating-point division


【解决方案1】:

使用zip 将子列表成对组合在一起,然后再次使用它来组合相应的分子和分母:

>>> q = [[7,2,3],[4,5,6]]
>>> r = [[6,1,2],[3,4,5]]
>>> [[n/d for n, d in zip(subq, subr)] for subq, subr in zip(q, r)]
[[1.1666666666666667, 2.0, 1.5], [1.3333333333333333, 1.25, 1.2]]

【讨论】:

  • 谢谢。这对于一个整数除以列表列表中的一个元素是如何工作的?我尝试在我发布的这个 (stackoverflow.com/q/39969884/6820344) 问题中这样做。在“失败输出”下,您可以看到它不允许进行这种类型的除法。
  • 如果是Python 2,则需要[[float(n)/d for n, d in zip(subq, subr)] for subq, subr in zip(q, r)]
  • 对于 Python 2,添加 from __future__ import division
【解决方案2】:

你可以这样做:

>>> out=[]
>>> for s1, s2 in zip(q, r):
...    inner=[]
...    for n, d in zip(s1, s2):
...       inner.append(float(n)/d)
...    out.append(inner)
... 
>>> out
[[1.1666666666666667, 2.0, 1.5], [1.3333333333333333, 1.25, 1.2]]

或者,使用 numpy:

>>> q=[[7.,2.,3.],[4.,5.,6.]]
>>> r=[[6.,1.,2.],[3.,4.,5.]]
>>> np.array(q)/np.array(r)
array([[ 1.16666667,  2.        ,  1.5       ],
       [ 1.33333333,  1.25      ,  1.2       ]])

或者,如果你有 int 字面量:

>>> q=[[7,2,3],[4,5,6]]
>>> r=[[6,1,2],[3,4,5]]
>>> np.array(q, dtype=float)/np.array(r)
array([[ 1.16666667,  2.        ,  1.5       ],
       [ 1.33333333,  1.25      ,  1.2       ]])

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2013-09-20
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多