Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
ich muss aus einem String(wlist[3]) alle nichtdruckbaren Steuerzeichen rausfiltern. Es muss geschwindigkeitsoptimiert sein und ich kann nur Python 2.2 (auf Handy) nutzen. Ich habe mir folgendes überlegt, was auch funktioniert. Aber geht das noch schneller, vielleicht mit der map funktion?
ok, statt chr(c) muss es ord(c) heissen aber es funktioniert leider nicht an allen stellen im Programm. Manchmal bekomme ich dann als Ergebnis von der filter funktion nicht den String, sondern die Liste, also statt "Hallo" "[u'H',u'a',u'l',u'l',u'o']"
In [14]: def is_not_control(c):
c = ord(c)
return not (c < 32 or 126 < c < 160)
....:
In [17]:
In [18]: f = functools.partial(filter, is_not_control)
In [19]: f("""dsadsadsadsdsad+#+#%&/()
\t
\t
sadsad
""")
Out[23]: 'dsadsadsadsdsad+#+#%&/()sadsad'
Hmm, ok. Die Frage ist dann, ob das wirklich einen Geschwindigkeitsvorteil bringt? Müsste ich dann mal testen oder kann mir das jemand plausibel erklären? Ich weiß, for Schleifen sind eher langsam... Ich habe meinen Code jetzt mal so gemacht:
Es geht ja nicht darum, wie schnell die Lösung auf irgend einem PC ist, sondern auf einem Handy/Samartphone. Dort verhalten sich einige Operationen ja recht unterschiedlich.
Da auf dem Handy 2.2 läuft, ist vermutlich die filter-Lösung fixer, aber mehr als spekulieren kann ich da auch nicht, das muss carknue schon selbst testen.
`functools.partial()` kann man ja durch eine ``lambda``-Funktion ersetzen.
Ansonsten würden mir noch Variationen für die ersten beiden Funktionen einfallen: Das `ord()` weglassen und dafür die Zahlen als Zeichen(ketten) schreiben. Also statt ``ord(zeichen) < 32`` zum Beispiel ``zeichen < ' '``. So spart man die `ord()`-Aufrufe.