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.

  • Wie identifizierst du die Schnittstelle eines Pakets, während du den Netzwerkverkehr auf allen Geräten hörst?
  • Wie wurde diese Datenumwandlung genau durchgeführt?
  • Warum passt PIL 2 Bilder in meinem Code nicht zusammen?
  • Mysqldb .. 'NoneType' Objekt ist nicht abonnierbar
  • Python wiederholen programm während wahr [duplizieren]
  • Messaging und Jupyter Notebooks
  • 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!

  • Macports Port Select Befehle
  • Wie installiere ich MySQLdb in Python 2.6 CentOS
  • WinUSB.DLL und Python: Speziell WinUsb_Initialize
  • Python-Zufallsfunktion ohne zufälliges Modul
  • Wie finde ich rekursiv für ein Tag von xml mit LXML?
  • Verständnis der Pandas-Datenblatt-Indizierung
  • 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.