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