2016-09-19 19 views
4

ich Programmierung in Python neu bin so wenden Sie sich bitte mit meiner newbie Frage trägt über ...Zählfrequenzen in zwei Listen, Python

ich eine erste Liste (list1), die ich für Duplikate gereinigt und beenden mit einer Liste mit nur einem von jedem Wert (list2):

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16 ],

list2 = [13, 19, 2, 16, 6, 5, 20, 21]

Was ich will, ist, wie oft jeder des Wertes in „li zu zählen st2 "erscheint in" list1 ", aber ich kann nicht herausfinden, wie das geht, ohne es falsch zu machen.

Der Ausgang ich suche ist etwas ähnlich wie diese:

Nummer 13 1 mal in list1 dargestellt. ........ Nummer 16 wird 2 mal in Liste1 dargestellt.

+0

Dieser Beitrag könnte ein guter Anfang sein http://stackoverflow.com/questions/2600191/how-can-i-count-the-occurrences-of-a-list-item-in-python –

Antwort

6
visited = [] 
for i in list2: 
    if i not in visited: 
    print "Number", i, "is presented", list1.count(i), "times in list1" 
    visited.append(i) 
7

Der einfachste Weg ist, einen Zähler zu verwenden:

from collections import Counter 
list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16] 
c = Counter(list1) 
print(c) 

Counter({2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1}) 

geben So können Sie die Schlüssel-Wert-Paare des Zählers Zugriff auf die Elemente und deren Vorkommen darstellt mit der gleichen Syntax, die für die Verarbeitung von Dicts verwendet wurde:

for k, v in c.items(): 
    print('- Element {} has {} occurrences'.format(k, v)) 

geben:

- Element 16 has 2 occurrences 
- Element 2 has 1 occurrences 
- Element 19 has 3 occurrences 
- Element 20 has 2 occurrences 
- Element 5 has 1 occurrences 
- Element 6 has 1 occurrences 
- Element 13 has 4 occurrences 
- Element 21 has 1 occurrences 
1

Simplest, einfachste zu verstehen, no-magic-Ansatz ist ein Objekt (assoziatives Array) zu erstellen und zählen nur die Zahlen in list1:

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16] 

frequency_list = {} 

for l in list1: 
    if l in frequency_list: 
     frequency_list[l] += 1 
    else: 
     frequency_list[l] = 1 

print(frequency_list) 

druckt diese:

{ 
    16: 2, 
    2: 1, 
    19: 3, 
    20: 2, 
    5: 1, 
    6: 1, 
    13: 4, 
    21: 1 
} 

Bedeutung 16 gibt es zweimal, 2 einmal da ist ...

+0

Eine viel kompaktere Version davon ist 'für das Element in der Liste1: frequency_list [item] = frequency_list.get (item, 0) + 1'. Ich weiß nicht, ob Sie das "magisch" finden, aber ich bevorzuge es für sauberen Code. Ich denke, es braucht ein bisschen mehr Verständnis, also vielleicht nur eine Frage der Meinung :) – roganjosh

+0

@roganjosh: schön. Ich dachte nur, dass eine Neuling Frage eine Neuling Antwort erfordert ;-) –

+1

Wie interessant. Ich fing an, meinen Vorschlag zu verwenden, nachdem ich ihn in einem [vid by Hettinger] (https://www.youtube.com/watch?v=OSGv2VnC0go) um 24:25 Uhr gesehen hatte. Ich entschied mich zu testen und Ihr Ansatz war durchweg schneller um ein vernünftiges Maß ... – roganjosh

0

Sie auch Betreiber

>>> list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16], 
>>> list2 = [13, 19, 2, 16, 6, 5, 20, 21] 

>>> import operator 
>>> for s in list2: 
... print s, 'appearing in :', operator.countOf(list1, s) 
0

In technischer Hinsicht können, list ist ein "Typ" von "Objekt". Python hat eine Reihe von eingebauten Typen wie Strings (str), Ganzzahlen (int), und ein paar andere, die leicht auf Google gefunden werden können. Der Grund dafür ist, dass jeder Objekttyp seine eigenen "Methoden" hat. Sie können sich diese Methoden als Funktionen vorstellen, die gängige Programmieraufgaben erledigen und Ihnen das Leben erleichtern.

Das Zählen der Anzahl der Vorkommen in einer Liste ist ein Beispiel für eine allgemeine Programmieraufgabe. Wir können es mit der count() Methode erreichen.Zum Beispiel erscheint die Anzahl der Male zählen 13 in list1:

count_13 = list1.count(13) 

Wir haben auch eine for-Schleife verwenden können über die gesamte Liste iterieren:

for x in list2: 
    print(list1.count(x)) #This is for python version 3 and up 

oder für Python-Versionen älter als 3:

for x in list2: 
    print list1.count(x) 
0

Sie müssen keine Duplikate entfernen. Wenn Sie einem Wörterbuch automatisch hinzufügen, werden die Duplikate als einzelne Werte betrachtet.

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16] 
counts = {s:list1.count(s) for s in list1} 
print counts 

{2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1}