Die Zeit um im Speicher nach Zeichen zu suchen dürfte, im Vergleich zum Datei öffnen und einlesen wohl irrerelevant sein.bwbg hat geschrieben:Wobei die Zeilen auch irgendwo her kommen müssen. Aber das ist für die Problemlösung irrelevant. Die Performancefrage wurde gar nicht gestellt.
Wenn wir allerdings nach der Performace für bereits im Speicher befindliche Zeilen fragen, ist sicher für einen Buchstaben das die performanteste Lösung:
if line.find("G" ):
Hier werden Strings übergeben und eine Umwandlung der Strings in etwas anderes erübrigt sich. Es kann gleich mit dem Suchen begonnen werden, und zwar zuerst nach dem ersten Zeichen des übergebenen Parameters, wären weitere da, würden dann auch die nächsten Zeichen verglichen. Das aber erübrigt sich und fertig.
Die am wenigstens performante Lösung, wenn wir einmal regex nicht berücksichtigen, wäre bei einem Zeichen:
Code: Alles auswählen
if set("G").intersection(line):
Schwer abschätzbar ist die Performance von:
Code: Alles auswählen
if 'G' in line:
Bei drei Zeichen allerdings ist die Frage, wieviel Zeit kosten drei Funktionsaufrufe mit konstanten, bzw. referenzierten Parametern in Python im Vergleich zum einmaligen Funktionsaufruf mit:
if set("FGM").intersection(line):
Da bin ich überfragt. Ab einer gewissen Anzahl zu suchender Zeichen ist set.intersection sowohl schneller als dreimaliges find wie auch angebracht.
Bei drei Zeichen sieht das noch gut aus und ist sicher für einen Programmieranfänger leicht verständlich:
if 'F' in line or 'G' in line or 'M' in line:
Wie das jetzt mit der Performance sein wird, schwer zu sagen, aber in diesem Fall wie gesagt, gemessen am Datei öffnen und einlesen und wohl auch wieder schreiben, wohl irrelevant.