Pythonische Methode, um alle ungeradzahligen Zeilen in einer Datei zu summen

Ich lerne Python für eine Programmierung Platzierung Test Ich habe für die Schule zu nehmen, und das ist buchstäblich die erste kleine Skript Ich warf zusammen, um ein Gefühl für sie zu bekommen. Mein Hintergrund ist hauptsächlich C # und PHP, aber ich kann keine Sprache auf dem Test verwenden.

Mein Test-Skript liest in der folgenden Textdatei (test_file1.txt). Die geraden Zeilen enthalten eine Stichprobengröße, und die ungeraden Zeilen enthalten "Ergebnisse" für jeden Test in der Probe. EOF ist mit einem 0 markiert. Ich wollte in der Datei lesen, die Stichprobengröße ausgeben und die Ergebnisse jedes Tests summieren. Wie würden Sie diese Aufgabe mit Python durchführen? Ich fühle mich wie ich versuchte, Python zu zwingen, wie PHP oder C # zu sein, und aus meiner Forschung schätze ich, dass es sehr "Python" Wege gibt, Thigs zu machen.

Test_file1.txt:

3 13 15 18 5 19 52 87 55 1 4 11 8 63 4 2 99 3 0 

Mein einfaches Skript:

 file = open("test_file1.txt", "r") i=0 for line in file: if i % 2 == 0: #num is even if line == '0': #EOF print 'End of experiment' else: #num is odd numList = line.split( ) numList = [int(x) for x in numList] print 'Sample size: ' + str(len(numList)) + ' Results: ' + str(sum(numList)) i += 1 file.close() 

Meine Ergebnisse:

 Sample size: 3 Results: 46 Sample size: 5 Results: 214 Sample size: 4 Results: 86 Sample size: 2 Results: 102 End of experiment 

Vielen Dank!

  • Opencv3 und Python 2.7 auf Virtual Enviorement - AttributeError: 'module' Objekt hat kein Attribut 'createLBPHFaceRecognizer'
  • Python-Import funktioniert beim Ausführen des Moduls aber bricht, wenn dieses Modul importiert wird
  • Lösung von nichtlinearen Gleichungen mit Python
  • Generiere N positive ganze Zahlen innerhalb eines Bereichs, der bis zu einer Gesamtmenge in Python addiert
  • Das Pycharm-Terminal ändert die Python-Version nicht entsprechend der Python-Version bei Project Interpreter
  • Einfache Benutzername und Passwort-Anwendung in Python
  • Python 2.7: Schreiben Sie sofort in die Datei
  • Geben Sie das Format für die Eingabeargumente argparse python an
  • 4 Solutions collect form web for “Pythonische Methode, um alle ungeradzahligen Zeilen in einer Datei zu summen”

    Verwenden Sie die Datei als Iterator, dann verwenden Sie iterators.islice() , um jede zweite Zeile zu erhalten:

     from itertools import islice with open("test_file1.txt", "r") as f: for line in islice(f, 1, None, 2): nums = [int(n) for n in line.split()] print 'Sample size: {} Results: {}'.format(len(nums), sum(nums)) 

    islice(f, 1, None, 2) überspringt die erste Zeile ( start=1 ), dann iteriert man über alle Zeilen ( stop=None ), die jede zweite Zeile islice(f, 1, None, 2) step=2 ).

    Dies wird mit dem, was Sie Dateigröße zu werfen, Es braucht keinen Speicher mehr, als es der interne Iteratorpuffer benötigt.

    Ausgabe für Ihre Testdatei:

     Sample size: 3 Results: 46 Sample size: 5 Results: 214 Sample size: 4 Results: 86 Sample size: 2 Results: 102 

    Du könntest es tun:

     with open("test_file1.txt", "r") as inf: lines = inf.readlines() for l in lines[1::2]: # read only alternating lines numList = map(int, line.split()) print "Sample size:", len(numList), "Results:", sum(numList) 

    Wie wäre es mit so etwas, ziemlich Pythonic imho:

     with open('test.txt') as fh: for i, line in enumerate(fh): if i % 2: nums = map(int, line.split()) print 'Sample size: %d, Results: %d' % (len(nums), sum(nums)) elif line == '0': print 'End of experiment' 

    Ich bin mir nicht sicher, wie pythonische Leute das finden können, aber ich finde das Reißverschluss, Karte und reduzieren, um eine ziemlich praktische Möglichkeit zu sein, dies in einer kompakten Weise zu tun. Allerdings kann es ein bisschen verschleiert sein.

     with open("test.txt") as fd: lines = [map(int, s.strip().split()) for s in fd.readlines()] print "\n".join("Sample Size: %d \t Results: %d"%tuple(map(sum,(d[0],d[1]))) for d in zip(lines, lines[1:], range(len(lines))) if d[2] % 2 == 0) 
    Python ist die beste Programmiersprache der Welt.