如何通过Python中另一个列表的相应成员划分列表成员?

时间:2010-09-16 22:46:56

标签: python

假设我有两个数据集。我有一周一周的用户尝试我的服务。

trials = [2,2,2,8,8,4]

我有一周一周的注册试用用户。

conversions = [1,0,2,4,8,3]

我可以通过这种方式快速完成:

conversion_rate = []
for n in range(len(trials)):
   conversion_rate.append(conversions[n]/trials[n])

你能想到更优雅的方式吗?

奖励:结果列表是[0, 0, 1, 0, 1, 0]的整数 ,而不是花车清单。获取浮动列表的最简单方法是什么?

4 个答案:

答案 0 :(得分:15)

使用zip:

[c/t for c,t in zip(conversions, trials)]

获得浮动的最优雅方法是升级到Python 3.x。

如果您需要使用Python 2.x,那么您可以写下:

>>> [float(c)/t for c,t in zip(conversions, trials)]
[0.5, 0.0, 1.0, 0.5, 1.0, 0.75]

或者,您可以在文件的开头添加:

from __future__ import division

但请注意,这会影响程序中各处的划分行为,因此您需要仔细检查是否有任何需要整数除法的地方,如果是,请写//而不是{{1 }}

答案 1 :(得分:2)

怎么样

trials = [2,2,2,8,8,4]
conversions = [1,0,2,4,8,3]
conversion_rate = [conversion / trials[n] for n, conversion in enumerate(conversions)]

答案 2 :(得分:2)

不使用zip和float:

[1.0*conversions[n]/trials[n] for n in xrange(len(trials))]

答案 3 :(得分:1)

如果您正在使用numpy,则可以使用以下提示:

import numpy as np
conversion_rate = np.divide(trials, conversions)

或使用广播:

import numpy as np
trials = np.array([2, 2, 2, 8, 8, 4])
conversions = np.array([1, 0, 2, 4, 8, 3])
conversion_rate = 1.0 * trials / conversions