2017-06-15 48 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

我明白了,谢谢你指出 –

相关问题