2017-06-15 14 views

Antwort

4

Verwenden Sie einfach count Methode:

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

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

Danke, half dies. –

2

Wenn die Elemente hashable sind, können Sie einfach verwenden einen Zähler Sie dann in eine Liste umwandeln zurück. Wie:

from collections import Counter 

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

Dies erzeugt:

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

Dies funktioniert in O (| A | + | B |) mit | A | die Zahlen in A und | B | die Zahlen in B (gegebenen Wörterbuch Lookup funktioniert in O (1), was fast immer der Fall ist).

Wenn die Elemente nicht (zum Beispiel list s, dict ionaries, object s, ...) gehasht werden, dann können Sie @CharlesMitjans Antwort verwenden, die in O (läuft | A | × | B |) (was tendenziell weniger effizient ist, aber dann kann man Hashing nicht nutzen).

3

Die Methoden, wie durch @CarlesMitjans oder @WillenVanOnsem vorgeschlagen sind bessere Lösungen als diese, aber der Grund, warum Ihre Methode nicht der Fall funktioniert, dass Sie Ihre count Variable innerhalb der ersten Schleife initialisieren müssen (und einrücken auch die d+=1 Linie):

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 

die gibt:

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

Ich sehe, danke für den Hinweis –

Verwandte Themen