在python中划分两个列表

ely*_*ely 28 python list

我有2个列表ab:

a  =   [3,    6,   8,   65,   3]
b  =   [34,   2,   5,   3,    5]

c gets [3/34, 6/2, 8/5, 65/3, 3/5]
Run Code Online (Sandbox Code Playgroud)

是否有可能在Python中获得它们的比例,如c上面的变量?我试着输入:

 a/b
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'list' and 'list'
Run Code Online (Sandbox Code Playgroud)

jam*_*lak 35

>>> from __future__ import division # floating point division in Py2x
>>> a=[3,6,8,65,3]
>>> b=[34,2,5,3,5]
>>> [x/y for x, y in zip(a, b)]
[0.08823529411764706, 3.0, 1.6, 21.666666666666668, 0.6]
Run Code Online (Sandbox Code Playgroud)

或者numpy你可以做到a/b

>>> import numpy as np
>>> a=np.array([3,6,8,65,3], dtype=np.float)
>>> b=np.array([34,2,5,3,5], dtype=np.float)
>>> a/b
array([  0.08823529,   3.        ,   1.6       ,  21.66666667,   0.6       ])
Run Code Online (Sandbox Code Playgroud)

  • @esseks实际上可以发布你认为他们的问题的答案,如果你非常确定你是正确的,如果OP说他们不是他们想要的话我会删除我的答案 (2认同)

Ray*_*ger 17

内置的map()函数可以解决这些问题:

>>> from operator import truediv
>>> a=[3,6,8,65,3]
>>> b=[34,2,5,3,5]
>>> map(truediv, a, b)
[0.08823529411764706, 3.0, 1.6, 21.666666666666668, 0.6]
Run Code Online (Sandbox Code Playgroud)


sap*_*api 10

你可以使用list comprehension(逐个元素)来做到这一点:

div = [ai/bi for ai,bi in zip(a,b)]
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想要浮点除法,则需要指定此值(或使原始值浮动):

fdiv = [float(ai)/bi for ai,bi in zip(a,b)]
Run Code Online (Sandbox Code Playgroud)

  • 或者`来自__future__ import division`,或者使用Python 3(因为OP可能已经存在). (3认同)

Ash*_*ary 10

使用zip和列表理解:

>>> a = [3,6,8,65,3]
>>> b = [34,2,5,3,5]
>>> [(x*1.0)/y for x, y in zip(a, b)]
[0.08823529411764706, 3.0, 1.6, 21.666666666666668, 0.6]
Run Code Online (Sandbox Code Playgroud)