Czego nie powinniśmy robić w Pythonie? #4

Witam w czwartym artykule z serii dotyczącej tego, czego nie powinniśmy robić w Pythonie. Załączam trzy poprzednie wpisy:

Funkcja zip

Jak jeden mąż, osoby początkujące, pisząc kod w Pythonie i chcąc iterować po dwóch listach jednocześnie, robią coś takiego:

1
2
3
4
5
6
7
8
9
10
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>>
>>> for i, x in enumerate(a):
...     value_from_b = b[i]
...     print(value_from_b, x)
...
a 1
b 2
c 3

Czyli, używając funkcji enumerate, dostają się do aktualnego indeksu i korzystając z niego, biorą wartość z drugiej tablicy. No niby można. Ale to nie jest Pythonowe rozwiązanie.

Python dostarcza wbudowane narzędzie do tego typu operacji, czyli wspomnianą w nagłówku, funkcję zip. A działa ona tak:

1
2
3
4
5
6
7
8
9
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>>
>>> for x, y in zip(a, b):
...     print(y, x)
...
a 1
b 2
c 3

Co ciekawe – ta funkcja przyjmuje jeden lub więcej iterabli (*args), więc możemy zrobić coś takiego:

1
2
3
4
5
6
7
8
9
10
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> c = (11, 22, 33)
>>> d = 'wxz'
>>> for x, y, z, w in zip(a, b, c, d):
...     print(x, y, z, w)
...
1 a 11 w
2 b 22 x
3 c 33 z

I tak, w Pythonie string jest iterable. Jeśli natomiast przekazane obiekty nie mają tej samej długości, to zip zawęża zakres do najkrótszej listy:

1
2
3
4
5
6
7
8
9
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c', 'd', 'e']
>>> c = (11, 22, 33)
>>> for x, y, z in zip(a, b, c):
...     print(x, y, z)
...
1 a 11
2 b 22
3 c 33

To, co warto wiedzieć, poza tym jak używać tej funkcji, to to co dokładnie ona zwraca. A zwraca po prostu obiekt iterable, którego elementami są tuple zawierające wartości z przekazanych mu list.


Czekaj, stop!

Podoba Ci się to co tworzę? Jeśli tak to zapraszam Cię do zapisania się na newsletter:

Aby potwierdzić swoją subskrypcję, odbierz pocztę i kliknij w link potwierdzający:) jeśli maila nie ma to poczekaj chwile i/lub sprawdź folder spam/inne/oferty itp :)

Aby potwierdzić swoją subskrypcję, odbierz pocztę i kliknij w link potwierdzający:) jeśli maila nie ma to poczekaj chwile i/lub sprawdź folder spam/inne/oferty itp :)
a w ramach prezentu otrzymasz całkowicie za darmo, dwa dokumenty PDF „6 (nie zawsze oczywistych) błędów popełnianych podczas nauki programowania” który jest jednym z efektów ponad siedmioletniej pracy i obserwacji rozwoju niejednego programisty oraz „Wstęp do testowania w Pythonie”, będący wprowadzeniem do biblioteki PyTest.
Jeśli to Cię interesuje to zapraszam również na swoje social media.

Jak i do ewentualnego postawienia mi kawy :)

Zamiana wartości zmiennych z użyciem zmiennej tymczasowej

Czyli mamy zmienną a i b. Chcemy by w zmiennej a była wartość zmiennej b i w zmiennej b była wartość zmiennej a.

I kod wygląda najczęściej tak:

1
2
3
4
5
6
7
8
9
>>> a = 5
>>> b = 6
>>>
>>> c = a
>>> a = b
>>> b = c
>>>
>>> print(a, b)
6 5

A możesz zrobić to znacznie ładniej:

1
2
3
4
5
>>> a = 5
>>> b = 6
>>> a, b = b, a
>>> print(a, b)
6 5

Przyznaj, że to raj perfekcjonistów:)

Budowanie warunków

Sytuacja jest prosta – chcemy napisać warunek, który będzie sprawdzał czy wartość zmiennej zawiera się w jakimś przedziale. I dostajemy taki kod:

1
2
3
4
5
x = 5


if x > 4 and x < 10:
  pass

To, co powinniśmy zauważyć, a już na pewno nie zignorować, to reakcja PyCharma na taki kod, która sugeruje, że coś jest nie tak!

PyCharm sugeruje nam, że taki zapis jest nie Pythonowy. W Pythonie możemy tworzyć takie warunki, określając przedział bardziej matematycznie tj:

1
2
3
4
5
x = 5


if 4 < x < 10:
  pass

I to na tyle, jeśli chodzi o czwartą część. Będą kolejne, choć pewnie stali czytelnicy zauważyli, że potrzebowałem chwilowej przerwy od tej serii, to zapewniam – będą kolejne!

Dzięki za wizytę,
Mateusz Mazurek
Mateusz M.

Pokaż komentarze

  • Hej,
     
    Tytuł pierwszego rozdziału jest trochę mylący, bo pomyślałem że powinienem szerokim łukiem omijać funkcję zip, ale jak już się wczytałem to zrozumiałem.
     
    Lubię Pythona za uproszczenie operacji swap. Lepiej się czyta kod dzięki temu. Co do operacji warunkowych to PyCharmowe rozwiązanie jest mniej czytelne. Ciekaw jestem czy wpływa ono na złożoność obliczeniową i czasową programu?
     
    Pozdrawiam.

    • Cześć!
      Dzięki za komentarz:) poprawiłem, faktycznie mylący, pierwszy akapit:)
       
      Co do złożoności obliczeniowej to myślę że nie wpływa:)

Ostatnie wpisy

Podsumowanie: luty i marzec 2024

Ostatnio tygodnie były tak bardzo wypełnione, że nie udało mi się napisać nawet krótkiego podsumowanie. Więc dziś zbiorczo podsumuję luty… Read More

2 tygodnie ago

Podsumowanie: styczeń 2024

Zapraszam na krótkie podsumowanie miesiąca. Książki W styczniu przeczytałem "Homo Deus: Historia jutra". Książka łudząco podoba do wcześniejszej książki tego… Read More

3 miesiące ago

Podsumowanie roku 2023

Cześć! Zapraszam na podsumowanie roku 2023. Książki Zacznijmy od książek. W tym roku cel 35 książek nie został osiągnięty. Niemniej… Read More

4 miesiące ago

Podsumowanie: grudzień 2023

Zapraszam na krótkie podsumowanie miesiąca. Książki W grudniu skończyłem czytać Mein Kampf. Nudna książka. Ciekawsze fragmenty można by było streścić… Read More

4 miesiące ago

Praca zdalna – co z nią dalej?

Cześć, ostatnio w Internecie pojawiło się dużo artykułów, które nie były przychylne pracy zdalnej. Z drugiej strony większość komentarzy pod… Read More

4 miesiące ago

Podsumowanie: listopad 2023

Zapraszam na krótkie podsumowanie miesiąca. Książki W listopadzie dokończyłem cykl "Z mgły zrodzony" Sandersona. Tylko "Stop prawa" mi nie do… Read More

5 miesięcy ago