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.

  • Löschen Sie eine Spalte in einem mehrdimensionalen Array, wenn alle Elemente in dieser Spalte eine Bedingung erfüllen
  • Holen Sie sich Matplotlib Legende Ort?
  • Python Regex - Satz ohne Strings
  • Wie kann ich maxlag für ARMAX.predict ändern?
  • Firebase Cloud Messaging (FCM) in Python mit pyFCM - Kundenregistrierung
  • Schlüssel und Werte des ursprünglichen Wörterbuchs umkehren
  • 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!

  • Ist die Liste wirklich schneller als die String-Verkettung in Python?
  • Was ist StringIO in Python für die Wirklichkeit verwendet?
  • Lieblings-Open Source Google App Engine Apps (Java oder Python)
  • Twitter Streaming nach Orten
  • Hinzufügen von Elementfunktionen zu einer Boost-Python-Klasse nach der Tatsache?
  • Vectorized bewegte Fenster auf 2D-Array in numpy
  • 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.