str.find()
gibt immer -1
zurück, wenn nicht gefunden. Kann ich einen Ausdruck anstelle von str.find()
und return None
schreiben, wenn nicht gefunden?Ausdruck, der zu None ausgewertet wird, wenn Teilstr. Nicht gefunden wird
Antwort
Wenn ich zusammenfassen, Sie wollen etwas, das:
- ist ein Ausdruck
- Wertet zu
None
wenn nicht gefunden - Wertet auf den Index, wenn gefunden
- Nutzt keine ternäre (so dass Python 2.4 kann damit umgehen)
Die einzige Lösung, die ich mit der oben kommen konnte alle Anforderungen erfüllt, ist dies seltsame:
(lambda x: x and x - 1)((str.find(substr) + 1) or None)
Zum Beispiel:
>>> (lambda x: x and x - 1)(('abcd'.find('b') + 1) or None)
1
>>> (lambda x: x and x - 1)(('abcd'.find('_') + 1) or None)
>>>
Ich habe keine Python 2.4-Installation zum Testen, also kann ich nur hoffen, dass es funktioniert.
Lambda funktioniert wirklich! tks ~ – ThunderEX
None if str.find() < 0 else str.find()
und wenn der Code-Duplizierung Sie stört (und es sollte):
index = str.find()
None if index < 0 else index
Der ternäre Zustand war added in 2.5. Also, wenn Sie eine ältere Version von Python haben, können Sie dies stattdessen tun:
Meinst du etwas wie das?
def find2(str, substr):
result = str.find(substr)
return result if result != -1 else None
In Python 2.4, ändern Sie die letzte Zeile zu
if result != -1:
return result
else:
return None
Nur eine Anmerkung, wahrscheinlich eine schlechte Idee, eine Variable "sub" zu nennen, da das als Funktion in einigen Namespaces existiert. – Serdalis
@Serdalis: Du hast Recht Ich habe es geändert –
Tks aber mein Python 2.4 konnte das nicht unterstützen :(Gibt es sonst noch einen Weg? – ThunderEX
- 1. JSP: EL-Ausdruck wird nicht ausgewertet
- 2. Warum wird der Ausdruck 011 == 11 zu falsch ausgewertet?
- 3. Wie regulärer Ausdruck OR-Operator ausgewertet wird
- 4. Wie wird diese hakell Ausdruck ausgewertet
- 5. std :: bedingte wird nicht ausgewertet
- 6. Warum wird {} == false zu false ausgewertet, während [] == false zu true ausgewertet wird?
- 7. Importierte Module werden zu None, wenn eine Funktion ausgeführt wird
- 8. Warum wird list.append zu false ausgewertet?
- 9. io Zuordnung Operator wird nicht ausgewertet?
- 10. NPM nicht gefunden, wenn NVM verwendet wird
- 11. Befehl nicht gefunden, wenn sudo verwendet wird
- 12. Wird (size_t) ((char *) 0) überhaupt nicht zu 0 ausgewertet?
- 13. Formel wird nie falsch ausgewertet
- 14. Bilddatei nicht gefunden wird
- 15. Application_BeginRequest wird nicht gefunden
- 16. Javac wird nicht gefunden
- 17. Ausdruck kann nicht ausgewertet werden. Malloc fehlgeschlagen
- 18. SSRS-Ausdruck bei False ausgewertet
- 19. "Ausdruck muss zu einem Knotensatz ausgewertet werden."
- 20. Substring gefunden wird, aber regex nicht
- 21. Benutzerdefinierter Springfilter wird nicht aufgerufen, wenn auf die Webanwendung zugegriffen wird oder die URL gefunden wird
- 22. Wie wird der Fehler behandelt, wenn die ID nicht gefunden wird?
- 23. Entity Framework gibt einen Fehler aus "Der Ausdruck konnte nicht ausgewertet werden. Die Operation wird nicht unterstützt. Unbekannter Fehler: 0x80070057."
- 24. wird die Bedingung nach && immer ausgewertet
- 25. Welche Ausnahme wird ausgelöst, wenn der Schlüssel im Python-Wörterbuch nicht gefunden wird?
- 26. Warum wird diese Linke zu einer Kreuzverbindung ausgewertet?
- 27. JavaScript - Nur der erste Teil von if-Anweisung wird ausgewertet
- 28. Knockout-Validierung wird sofort beim Laden ausgewertet
- 29. 0 wird als "none" decimalfield django behandelt
- 30. Nach einer definierten Anweisung ausgeführt wird, „none“ wird zweimal gedruckt
(Was) Hast du es versucht? –