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!
Spis treści:
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.