2016-05-30 96 views
2

我有两个数组(A & B)。 我想计算数组A中包含在数组B中的用户的百分比。 我已经尝试过但我找不到解决方案。在Python中加入两个列表:

+5

'1.0 * LEN(集(A)&设置(B))/ len(set(B))' –

+1

这些numpy数组吗? – ayhan

+3

你的标题是“列表”,但你的问题是“数组”。他们是Python列表,[array.array](https://docs.python.org/3/library/array.html)s,Numpy数组还是其他?另外,这些“数组”中的任何一个是否包含重复的项目? –

回答

10
100.0 * sum((x in B) for x in A)/len(A) 

如果B较大,使用了一套效率:

100.0 * len(set(B).intersection(A))/len(A) 
5

最pyhtonic的方法是像上面Rogalski评论。

的Python在我看来是非常强的,在集:https://docs.python.org/2/library/sets.html

可以使一个交叉点在两个方面

组(A)&组(B)或设置(A).intersection(集(上述(只是修正)B))

和公式就像提到

100 * len(set(A) & set(B))/len(set(A)) 
+0

这个问题说“数组A的用户的百分比”,所以我猜分母应该是“len(A)”。 – ayhan

+0

好思想 - thx –

+0

。交互可以采取一个不是集合的迭代,所以第二个调用是不必要的,也可以只是'set(A)&set(B)' –

0

你只需要创建一个组,总结了次在正元件是在B中的组成员的:

st = set(b) 

perc = sum((ele in st for ele in a),0.0)/len(a) * 100 

如果你确实有numpy的数组:

import numpy as np 

a, b = [1, 3], [1, 4,3] 
perc = np.in1d(a, b).sum()/100.0/len(a)