2010-09-16 59 views
5

比方说,我有两个数据集。我有一周一周的用户谁尝试我的服务。我如何通过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] ,而不是浮动列表。获得浮动列表最简单的方法是什么?

+1

起初我会用'zipWith'回答,但后来我意识到它不存在于python中。有多难过...... – Daenyth 2010-09-16 22:55:05

回答

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 

但是请注意,这影响程序中各处的分区行为,因此您需要仔细检查以确定是否有任何需要整数除法的地方,如果是这样,请写入//而不是/

+0

我有'q = [[7,2,3],[4,5,6]]'和'r = [[6,1,2],[3,4,5]] '。我需要划分相应的元素。 'B = [[float(j)/ float(i)for j in q] for i in r]'。但是,我不断收到错误:TypeError:float()参数必须是字符串或数字。我从未来进口了部门。有什么建议么? – Biotechgeek 2016-10-11 04:25:46

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)] 
+0

拉链当然。马克拜尔斯'是一个更好的答案,我会upvote它,如果我有足够的代表 – Day 2010-09-16 22:51:29

+1

+ +1的努力:) – Skilldrick 2010-09-16 22:55:03

+0

@Skilldrick嘿谢谢。现在我可以马上答复马克的答案;) – Day 2010-09-16 22:56:07

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 
2

不使用拉链和float:

[1.0*conversions[n]/trials[n] for n in xrange(len(trials))] 
相关问题