2017-07-28 6 views
0

Ich habe den folgenden Code, der eine Textdatei öffnet, die durch Komma getrennte Zahlen enthält.Python - wie mit Zähler Zeile für Zeile zu zählen

from collections import Counter 

with open("lottoresults.txt") as inf: 
    all_lines = [inf.read()] 
    print(all_lines) 
    for each_line in all_lines: 
     print(each_line) 
     counts = Counter(each_line) 
     set = each_line.replace("", "").split() 
     print(set) 
     for numbers in set: 
      nums = [int(i) for i in numbers.replace(",", "\n").split()] 
      print(nums) 
      for number in nums: 
       counts = Counter(nums) 
print(counts) 

Die Ergebnisse sind:

['1,2,3,4,5\n1,3,5,6,7\n1,8,9,10,11'] 
1,2,3,4,5 
1,3,5,6,7 
1,8,9,10,11 
['1,2,3,4,5', '1,3,5,6,7', '1,8,9,10,11'] 
[1, 2, 3, 4, 5] 
[1, 3, 5, 6, 7] 
[1, 8, 9, 10, 11] 
Counter({8: 1, 1: 1, 10: 1, 11: 1, 9: 1}) 

Was ich versuche, für das Programm zu erreichen, ist die erste Zeile zu lesen, führen Zähler die Anzahl der Male erscheint eine Zahl zu überprüfen, dann lesen Sie die zweite line, re-Count (dh Zählung zur vorherigen Zählung hinzufügen).

Wohin gehe ich falsch? Es zählt derzeit nicht einmal die Zahlen, da es mehr als 1 Instanzen von "1" gibt.

+1

Hinweis: Haben Sie beobachtet, dass die Ausgabe die Zählungen des letzten Arrays ergab? Das heißt, der Zähler wird neu initialisiert, aber nicht aktualisiert. –

+0

Ich habe es beobachtet, aber jetzt verstehe ich, warum es die Zahlen als einmal vorkommt! Vielen Dank. –

Antwort

0
from collections import Counter 

cnt = Counter() 
with open("lottorresults.txt") as f: 
    for line in f.readlines(): 
     numbers = [int(n) for n in line.strip().split(",")] 
     cnt.update(numbers) 

Ist das richtige Code überschreiben Sie wollen?

+0

Das ist genau das. Es macht so viel Sinn, wenn Sie sehen, wie es richtig funktioniert. Ich habe versucht, jedes zu zählen, indem ich es am Ende eingekapselt habe, als hätte ich damit eigentlich anfangen sollen ... –

2

können Sie die update Methode von collections.Counter verwenden, sonst halten Sie counts jede Iteration

from collections import Counter 

counts = Counter() 
with open("lottoresults.txt") as inf: 
    for each_line in inf: 
     counts.update(int(i) for i in each_line.split(',')) 
print(counts) 

Ergebnis

Counter({1: 3, 3: 2, 5: 2, 2: 1, 4: 1, 6: 1, 7: 1, 8: 1, 9: 1, 10: 1, 11: 1}) 
+0

+1 Die * update() * Methode ist wahrscheinlich die sauberste Methode. FYI, das ist eine gute Chance, * map() * wie in '' c.update (map (int, line.split (','))) '' oder zumindest einen Generatorausdruck wie in '' c.update zu verwenden (int (i) für i in line.split (',')) ''. –

+0

Guten Ruf auf den Generator Ausdruck – CoryKramer

Verwandte Themen