Ich würde sagen, dass Ihr Ansatz gut klingt - es ist ein ziemlich effizienter Weg, um es zu tun, und es wird dem Leser klar sein, was Sie tun.
Eine etwas weniger elegante aber möglicherweise schnellere Alternative ist der start
Parameter der find
Funktion.
i = 0
while True:
j = word.find('a', i)
if j == -1:
break
print word[:j] + word[j+1:]
i = j + 1
Die Suchfunktion ist wahrscheinlich in C hoch optimiert werden, so dass dies möglicherweise in der Zeichenfolge selbst in Python eine Leistungsverbesserung im Vergleich zu Iterieren über die Zeichen geben. Ob Sie das tun möchten, hängt jedoch davon ab, ob Sie nach Effizienz oder Eleganz suchen. Ich würde empfehlen, zuerst den einfachen und klaren Ansatz zu wählen und ihn nur dann zu optimieren, wenn das Performance-Profiling zeigt, dass Effizienz ein wichtiges Thema ist.
Hier sind einige Performance-Messungen zeigen, dass der Code find
mit schneller laufen kann:
>>> method1='[s[:key] + s[key+1:] for key,val in enumerate(s) if val == "a"]'
>>> method2='''
result=[]
i = 0
while True:
j = s.find('a', i)
if j == -1:
break
result.append(s[:j] + s[j+1:])
i = j + 1
'''
>>> timeit.timeit(method1, init, number=100000)
2.5391986271997666
>>> timeit.timeit(method2, init, number=100000)
1.1471052885212885
Ich denke, du willst 's [Taste + 1:]' – Triptych
@Triptynch das ist, was ich geschrieben habe. –