16 przydatnych jednowierszowych tekstów w języku Python, które upraszczają typowe zadania

Chcesz pisać elegancki i Pythoniczny kod? Oto lista przydatnych jednolinijek Pythona do wykonywania prostych zadań.

Jeśli jesteś początkującym programistą Pythona, spędzisz czas na zrozumieniu podstawowych struktur danych, takich jak listy i łańcuchy znaków. Niektóre operacje na tych strukturach danych można wykonać za pomocą zwięzłych, jednowierszowych fragmentów kodu.

Jako programista powinieneś przedkładać czytelność i łatwość konserwacji nad skracanie kodu. Ale w Pythonie łatwo jest wymyślić jedną linijkę, która jest zgodna z dobrymi praktykami kodowania.

W tym artykule skupimy się na jednolinijkach do prostych zadań przetwarzania list i ciągów znaków w Pythonie.

Zacznijmy!

Wygeneruj listę liczb

Najprostszym sposobem wygenerowania listy liczb jest użycie funkcji range(). Funkcja range() zwraca obiekt zasięgu, który można rzutować na listę. Użycie range(num) da sekwencję 0, 1, 2,…, num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Więcej o korzystaniu z funkcji range().

Możesz także użyć funkcji range() wraz z opcjonalną wartością kroku. Zatem zakres (początek, koniec, krok) da sekwencję początek, początek + krok, początek + 2*krok i tak dalej. Ostatnią wartością będzie start + k*krok, tak że (start + k*krok) < koniec i (start + (k+1)*krok) > koniec.

Znajdź wartości maksymalne i minimalne na liście

Możesz użyć wbudowanych funkcji max i min, aby odpowiednio obliczyć maksymalne i minimalne elementy na liście.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Uwaga dotycząca wielu zadań

Zauważ, że przypisaliśmy wartości zarówno min_elt, jak i max_elt w jednej instrukcji przypisania. Python obsługuje takie wielokrotne przypisania. Może to być pomocne podczas rozpakowywania iteracji i przypisywania wartości do wielu zmiennych jednocześnie.

Usuń duplikaty z listy

Inną powszechną operacją jest usuwanie duplikatów z list Pythona. Jest to konieczne, gdy trzeba pracować tylko z unikatowymi wartościami. Najprostszym sposobem na to jest przekonwertowanie listy na zestaw.

Zestaw to wbudowana struktura danych, której wszystkie elementy są unikalne i można je haszować.

>>> nums1 = [2,4,7,9,7,10]

W nums1 element 7 występuje dwukrotnie. Rzucenie go na zestaw usunie duplikat (tutaj 7), pozostawiając nam listę unikalnych wartości.

Ponieważ nadal musimy pracować z listą, przekonwertujemy zestaw z powrotem na listę. Tę operację można wykonać za pomocą następującego wiersza kodu:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 Aby dowiedzieć się więcej o innych technikach usuwania duplikatów z list Pythona, zapoznaj się z tym przewodnikiem.

Policz wystąpienia na liście

Aby policzyć, ile razy element występuje na liście, możesz użyć wbudowanej metody count(). list.count(elt) zwraca liczbę wystąpień elt na liście.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Tutaj 7 pojawia się raz na liście nums, więc metoda count() zwraca 1.

>>> nums.count(7)
1

Sprawdź, czy wszystkie elementy na liście spełniają warunek

Aby sprawdzić, czy wszystkie elementy na liście spełniają warunek, możesz użyć wbudowanej w Pythona funkcji all().

Funkcja all() przyjmuje jako argument wartość iterowalną i zwraca wartość True, jeśli wszystkie elementy w iterowalności mają wartość True (lub są zgodne z prawdą).

Tutaj chcielibyśmy sprawdzić, czy wszystkie elementy na liście nums2 są nieparzyste.

>>> nums2 = [3,4,7,11,21,67,12]

Możemy użyć rozumienia list do skonstruowania listy wartości boolowskich i możemy przekazać tę listę jako argument funkcji all().

Tutaj num%2!=0 będzie fałszem dla elementów 4 i 12, które są parzyste. W związku z tym lista wartości boolowskich zbudowana za pomocą wyrażenia listowego zawiera wartość False (a all(list) zwraca wartość False).

>>> all([num%2!=0 for num in nums2])
False

💡 Należy zauważyć, że wszystkie ([]) (all(any-empty-iterable) zwraca True.

Sprawdź, czy dowolny element na liście spełnia warunek

Aby sprawdzić, czy jakikolwiek element na liście spełnia warunek, możesz użyć funkcji any(). any(some-list) zwraca True, jeśli przynajmniej jeden element ma wartość True.

>>> nums2 = [3,4,7,11,21,67,12]

Podobnie jak w poprzednim przykładzie, używamy rozumienia listy, aby uzyskać listę wartości boolowskich. Lista nums zawiera liczby parzyste. Zatem funkcja any() zwraca wartość True.

>>> any([num%2 for num in nums2])
True

Odwróć ciąg

W Pythonie łańcuchy są niezmienne, więc jeśli chcesz odwrócić ciąg, możesz uzyskać tylko odwróconą kopię ciągu. Istnieją dwa popularne podejścia — oba można zapisać jako jednowiersze w Pythonie — wykorzystujące dzielenie ciągów znaków i wbudowane funkcje.

Korzystanie z krojenia ciągów

Krojenie łańcucha z ujemnymi wartościami step zwraca wycinek łańcucha zaczynając od końca. Składnia to łańcuch[start:stop:step]. Co więc daje ustawienie kroku -1 i zignorowanie indeksów startu i stopu?

Zwraca kopię łańcucha, zaczynając od końca łańcucha — łącznie z każdym znakiem.

>>> str1[::-1]
'olleh'

Korzystanie z funkcji reverse().

Wbudowana funkcja reversed() zwraca iterator odwrotny dla sekwencji.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Można go używać w połączeniu z metodą join(), jak pokazano:

>>> ''.join(reversed(str1))
'olleh'

Konwertuj ciąg znaków na listę znaków

Załóżmy, że chcielibyśmy podzielić ciąg znaków na listę znaków. Możemy to zrobić za pomocą wyrażenia rozumienia listy.

>>> str1 = 'hello'

Wyrażenia listowe są jednymi z najpotężniejszych jednowierszowych w Pythonie.

📒 Dowiedz się więcej o wyrażeniach listowych w Pythonie.

Przechodzimy przez łańcuch i zbieramy każdy znak.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

Aby podzielić dłuższy łańcuch na listę ciągów przy każdym wystąpieniu spacji, możesz użyć metody split().

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Widzieliśmy już, jak używać rozumienia list do dzielenia łańcucha na listę znaków. W tym przykładzie zebraliśmy wszystkie znaki, przechodząc przez łańcuch.

Tutaj musimy przejść przez łańcuch i zebrać tylko cyfry. Jak to zrobić?

  • Możemy ustawić warunek filtrowania w wyrażeniu rozumienia listy za pomocą metody isdigit().
  • c.isdigit() zwraca wartość True, jeśli c jest cyfrą; w przeciwnym razie zwraca False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Sprawdź, czy ciąg zaczyna się od określonego podciągu

Aby sprawdzić, czy ciąg zaczyna się od określonego podłańcucha, można użyć metody łańcuchowejstartswith(). str1.startswith(substring) zwraca wartość True, jeśli str1 zaczyna się od substringu. W przeciwnym razie zwraca False.

Oto kilka przykładów:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Sprawdź, czy ciąg kończy się określonym podciągiem

Jak można się domyślić, aby sprawdzić, czy ciąg znaków kończy się podanym podłańcuchem, można użyć metody endswith() .

>>> str5 = 'python'
>>> str5.endswith('on')
True

Równie dobrze możemy użyć metody łańcuchowej w wyrażeniu listowym, aby uzyskać koniec z listą wartości boolowskich.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Połącz elementy listy w łańcuch

Widzieliśmy już, jak podzielić ciąg znaków na listę znaków. Jak teraz wykonać odwrotną operację łączenia elementów listy w łańcuch?

W tym celu można użyć metody łańcuchowej join() o składni: separator.join(niektóre-listy).

Chcielibyśmy tylko połączyć elementy z listy w jeden ciąg; nie potrzebujemy żadnego separatora. Ustawiliśmy więc separator na pusty ciąg.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Utwórz słownik Pythona

Tak jak rozumienie listowe może pomóc nam konstruować nowe listy z istniejących iterowalnych elementów, tak rozumienie słownikowe może pomóc nam konstruować nowe słowniki z istniejących iterowalnych elementów.

Zrozumienia słownikowe Pythona to potężne jednolinijki, które mogą pomóc w konstruowaniu pomocy w tworzeniu słownika w locie.

Tutaj mamy nazwy, które są listą ciągów znaków.

>>> names = ['Joe','Amy','Jake','Florence']

Tworzymy names_d, słownik zawierający ciągi nazw jako klucze i długości ciągów jako wartości.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Warunkowe przypisywanie wartości do zmiennych

Czasami może być konieczne przypisanie wartości do zmiennych w zależności od określonego warunku.

Na przykład możesz odczytać dane wprowadzone przez użytkownika, na przykład wiek danej osoby. W zależności od wartości wejściowej możesz zdecydować, czy mogą uczestniczyć w imprezie.

Aby wykonać to warunkowe przypisanie w Pythonie, możesz napisać następującą jednolinijkę, używając operatora trójskładnikowego.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Dowiedz się więcej o operatorze trójskładnikowym w Pythonie.

Wygeneruj wszystkie permutacje

Permutacja odnosi się do możliwego ułożenia elementów w grupie. Jeśli w grupie jest n unikalnych elementów, to jest n! możliwych sposobów ich ułożenia — stąd n! permutacje.

Użyjmy następujących liter z listy:

>>> letters = ['a','b','c']

Możesz użyć permutacji z modułu itertools, aby wygenerować wszystkie możliwe permutacje danej iterowalności.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

Jak widać, użycie permutations(iterable) zwraca obiekt permutacji, przez który możemy przechodzić za pomocą pętli for:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Ale możemy przepisać to jako wyrażenie jednowierszowe, rzutując obiekt permutacji na listę:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Tutaj są trzy unikalne elementy i jest 3!=6 możliwych permutacji.

Generuj podzbiory listy

Czasami może być konieczne skonstruowanie wszystkich możliwych podzbiorów o określonym rozmiarze z listy lub innych elementów iterowalnych. Użyjmy listy liter i uzyskajmy wszystkie listy podrzędne o rozmiarze 2.

Aby to zrobić, możemy użyć kombinacji z modułu itertools, takich jak:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Wniosek

W tym samouczku przyjrzeliśmy się przydatnym jednolinijkom Pythona do wykonywania typowych operacji na listach i ciągach znaków. Nauczyliśmy się również jednowierszowych, takich jak listy Pythona i wyrażenia słownikowe, oraz nauczyliśmy się, jak używać ich w połączeniu z wbudowanymi funkcjami do wykonywania pożądanych zadań.

W następnym kroku sprawdź tę listę przyjaznych dla początkujących projektów Pythona.