result = [*transform* *iteration* *filter*]Pierwsze wykonywana jest iteracja (jakaś pętla), jej wyniki podlegają filtrowaniu, to co przejdzie filtrowanie (opcjonalny mechanizm), może zostać jeszcze przetransformowane, a ostateczny wynik trafia jako element listy result.
Prosty przykład:
print [x for x in range(10)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]Do filtra trafiają wyniki iteracji, jest to konstrukcja "if", jeżeli zwróci True, wartość zostanie przekazana do transformowania. W przykładzie powyżej transformacji nie ma, wynik jest umieszczany jako element listy. Tutaj przykład z użyciem filtra.
def ftr(x): if x % 2 == 0: return True return None print [x for x in range(10) if ftr(x)] [0, 2, 4, 6, 8]Wydaje mi się (nie udało mi znaleźć), że do konstrukcji filtra nie można używać "else" albo "elif", ale zastosowanie warunków logicznych wydaje się wystarczające.
print ['zero' if x == 0 else 'six' if x == 6 else str(x) + '?' for x in range(10) if x % 2 == 0 or x % 3 == 0] ['zero', '2?', '3?', '4?', 'six', '8?', '9?']W przypadku transformacji, możemy skorzystać z instrukcji warunkowej "else". Nie można skorzystać z "elif", ale bez tego można sobie poradzić. Poniżej ekwiwalent transformacji, jaka została użyta, w konstrukcji listy.
def tsfm(x): if x == 0: return 'zero' else: if x == 6: return 'six' else: return str(x) + '?'
Brak komentarzy:
Prześlij komentarz