Entschuldige, das mit dem Byte-Array war mir auch nur noch schnell eingefallen. Das ich es damit in beiden Fällen verkompliziere ist mir auch klar.
Aber überprüfen ob nur ein Zeichen übergeben wird muss ich in beiden Fällen nicht, da die Texteingabe durch die Tastatur erfolgt und für jede Taste wird auch nur genau ein Event ausgelöst.
Der realistische Anwendungsfall wäre in einem Spiel wohl kaum gegeben, da sicher niemand einen Roman im Chat schreiben wird und andere Text-Felder/Boxen dann wohl eher nicht beschreibbar sind. Ich empfinde es nur als unschön mit den Strings so zu arbeiten.
Kann ich jetzt leider nicht so einfach testen, da ich hier nur python3.2 habe. Das hier war das Testscenario:
Code: Alles auswählen
#!/usr/bin/env python3
import time
import array
loops = 100000
index = 5
a = "Hallo Welt"
b = list(a)
c = array.array("B")
c.fromstring(a)
t = time.time()
for _ in range(loops):
a = a[:index] + "a" + a[index:]
print(time.time() - t)
t = time.time()
for _ in range(loops):
c.insert(index, 97)
c.tostring()
print(time.time() - t)
t = time.time()
for _ in range(loops):
b.insert(index, "a")
"".join(b)
print(time.time() - t)
Ausgabe:
5.922000169754028
5.483999967575073 #Bei einem Unicode-Array das doppelte
117.72000002861023