2016-05-30 84 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)