2012-11-22 5 views

Odpowiedz

3

Gdybym Podsumowując, chcesz coś, co:

  • jest wyrazem
  • Ocenia do None, gdy nie znaleziono
  • Ocenia do indeksu po znalezieniu
  • nie używa trójargumentowy (tak, że Python 2.4 poradzi sobie)

Jedynym rozwiązaniem mogłem wymyślić, który spełnia wszystkie wymagania jest to dziwne:

(lambda x: x and x - 1)((str.find(substr) + 1) or None) 

Na przykład:

>>> (lambda x: x and x - 1)(('abcd'.find('b') + 1) or None) 
1 
>>> (lambda x: x and x - 1)(('abcd'.find('_') + 1) or None) 
>>> 

Nie mam instalacji Pythona 2.4, aby ją przetestować, więc mogę tylko mieć nadzieję, że działa.

+1

lambda naprawdę działa! tks ~ – ThunderEX

5
None if str.find() < 0 else str.find() 

a jeśli powielanie kodu przeszkadza (i powinien):

index = str.find() 
None if index < 0 else index 

Warunkiem trójargumentowy był added w 2,5. Więc jeśli masz starszą wersję Pythona, możesz to zrobić:

def my_find(str, sub_str) 
    index = str.find(sub_str) 
    if index < 0: 
     return None 
    else: 
     return index 
+0

Tks.My Python 2.4 nie mógł tego podtrzymać :( – ThunderEX

+0

@ThunderEX: Zobacz edycję – zenpoy

7

Masz na myśli coś takiego?

def find2(str, substr): 
    result = str.find(substr) 
    return result if result != -1 else None 

W Pythonie 2.4, zmienić ostatni wiersz

if result != -1: 
     return result 
    else: 
     return None 
+0

Po prostu uwaga, prawdopodobnie zły pomysł na wywoływanie zmiennej 'sub', ponieważ istnieje ona jako funkcja w kilku przestrzeniach nazw. – Serdalis

+0

@Serdalis: Masz rację, zmieniłem to. –

+0

Tks, ale mój Python 2.4 nie mógł tego podtrzymać :(Czy jest jakakolwiek inna metoda? – ThunderEX

Powiązane problemy