2017-06-15 50 views

回答

4

只需使用count方法:

A=['a','b','c'] 
B=['a','a','b','c'] 

[B.count(x) for x in A] 
+0

謝謝,這有助於。 –

2

如果元素是可哈希,你可以簡單地使用計數器那麼你變換回列表。像:

from collections import Counter 

ctr = Counter(B) 
result = [ctr[x] for x in A] 

這產生:

>>> [ctr[x] for x in A] 
[2, 1, 1] 

這適用於O(| A | + | B |)| A |A| B |B中的數字(給定的字典查找在O(1)中工作,這幾乎總是如此)。

如果這些元素不能被散列(例如list S,dict ionaries,object S,...),那麼你可以使用@CharlesMitjans答案,它運行在O(| A | × |乙|)(這往往效率較低,但不能利用散列)。

3

@CarlesMitjans@WillenVanOnsem建議的方法是比這更好的解決方案,但你的方法行不通的原因是,你需要初始化第一循環中的count變量(也縮進d+=1線):

P = np.ndarray(shape=3, dtype=int) 
count = 0 
d = 0 

for i in A: 
    count = 0 
    for j in B: 
     if i == j: 
      count += 1 
      P[d] = count 
    d += 1 

這給:

>>> P 
array([2, 1, 1]) 
+1

我明白了,謝謝你指出 –

相關問題