2012-11-22 3 views

Antwort

3

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.

+1

Lambda funktioniert wirklich! tks ~ – ThunderEX

5
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:

+0

Tks.My Python 2.4 konnte das nicht unterstützen :( – ThunderEX

+0

@ThunderEX: Siehe die Bearbeitung – zenpoy

7

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 
+0

Nur eine Anmerkung, wahrscheinlich eine schlechte Idee, eine Variable "sub" zu nennen, da das als Funktion in einigen Namespaces existiert. – Serdalis

+0

@Serdalis: Du hast Recht Ich habe es geändert –

+0

Tks aber mein Python 2.4 konnte das nicht unterstützen :(Gibt es sonst noch einen Weg? – ThunderEX

Verwandte Themen