如何将两个列表中的元素合并到第三个列表中?

35

我有两个列表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]

在 Python 中是否可以像上面变量 c 一样获取它们的比率?

我尝试了 a/b 却收到了错误提示:

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

6
定义两个列表的“比率”。 - zch
你期望的输出是什么? - Ashwini Chaudhary
什么是列表比率? - Stefano Sanfilippo
6个回答

44
>>> 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]

或者在 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       ])

实际上这取决于OP对“分割列表”的含义。假设他想将其解释为集合分数的意义(例如,出现在两个列表中的元素)。 - Stefano Sanfilippo
猜测适用于注释,而不是答案。实际上,我想到的第一件事是 A\B 设置分数。 - Stefano Sanfilippo
3
@esseks,如果你相当确定自己的答案是正确的,并且如果 OP 说不是他们想要的,那么发布你认为问题意思的答案是可以的,我会删除我的答案。 - jamylak
1
@esseks 我所说的a/b是指a中第一个元素除以b中第一个元素,依此类推。所得到的答案基本上就是我要找的。 @jamylak 感谢您的两个答案,了解到获得相同结果不同方式是很有用的。 - ely

21

内置的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]

谢谢您的回答!当我将SQL查询转换为NumPy中的列表时,我遇到了“argument 2 to map() must support iteration”的错误。您有任何解决此错误的想法吗? - Revolucion for Monica

13
你可以使用列表推导式(逐个元素)来实现这个功能:
div = [ai/bi for ai,bi in zip(a,b)]

请注意,如果您需要浮点除法,则需要指定此操作(或将原始值转换为浮点数):

fdiv = [float(ai)/bi for ai,bi in zip(a,b)]

3
或者使用from __future__ import division,或者使用Python 3(因为提问者很可能已经在使用Python 3)。 - lvc
1
@lvc - 我不喜欢导入会完全改变代码含义的模块,除非绝对必要。如果我使用 from __future__ import division,那么我编写的大量代码将会出现严重错误。 - sapi

9

使用 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]

1
使用 numpy.divide
c=np.divide(a,b)

0
你可以使用以下代码:
a  =   [3,    6,   8,   65,   3]
b  =   [34,   2,   5,   3,    5]

c = [float(x)/y for x,y in zip(a,b)]
print(c)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接