Lista ze zrozumieniem w Pythonie – z przykładami
Opublikowany: 2022-02-18W Pythonie listy składane pomagają tworzyć nowe listy z istniejących elementów iteracyjnych, takich jak listy, ciągi znaków i krotki.
Ich zwięzła składnia pozwala tworzyć nowe listy w zaledwie jednym wierszu kodu. A ten samouczek nauczy Cię, jak możesz to zrobić.
W ciągu najbliższych kilku minut nauczysz się:
- Jak utworzyć nową listę za pomocą pętli
for
, - Składnia do używania wyrażeń listowych w Pythonie i
- Jak modyfikować listy składane za pomocą instrukcji warunkowej
if
.
Ponadto napiszesz kilka przykładów, które pomogą Ci lepiej zrozumieć rozumienie list.
Zanurzmy się.
Jak tworzyć listy Pythona za pomocą pętli?
Załóżmy, że masz listę nums
. I chciałbyś utworzyć kolejną listę zawierającą sześcian wszystkich liczb w nums
. Oto jak to zrobisz za pomocą pętli for
w Pythonie:
nums = [2,3,5,7] num_cubes = [] for num in nums: num_cubes.append(num**3) print(num_cubes) # Output [8, 27, 125, 343]
W powyższym kodzie mamy następujące kroki:
- Zainicjuj pustą listę
num_cubes
. -
nums
listę liczb. - Uzyskaj dostęp do każdej liczby
num
i oblicz jej kostkę za pomocą operatora potęgowania:num**3
. - Na koniec dodaj wartość w sześcianie do listy
num_cubes
Uwaga: W Pythonie operator potęgowania
**
jest używany ze składnią:num**pow
— liczbanum
jest podnoszona do potęgipow
.
Możesz to jednak zrobić łatwiej, korzystając ze zrozumienia list w Pythonie. Przejdźmy do nauki jego składni.
Składnia list składanych w Pythonie
Ogólna składnia dla rozumienia list jest pokazana poniżej.
<new_list> = [<expression> for <item> in <iterable>]
Przeanalizujmy powyższą składnię.
- W Pythonie listy są oddzielone parą nawiasów kwadratowych
[]
dlatego musisz umieścić instrukcję rozłożenia listy w[]
. -
<item>
w<iterable>
oznacza, że przechodzisz przez iterację. Każdy obiekt Pythona, przez który można przejść w pętli i uzyskać dostęp do poszczególnych elementów — takich jak listy, krotki i łańcuchy — jest iterowalnymi. -
<expression>
to dane wyjściowe, które chcesz obliczyć dla każdego<item>
w<iterable>
.
I to brzmi prosto, tak?
Zasadniczo chcesz zrobić coś dla wszystkich elementów na liście (lub dowolnej iterowalnej), aby uzyskać nową listę .
Korzystając z tego, możemy uprościć składnię, jak pokazano na poniższym obrazku.

Teraz, gdy nauczyłeś się składni, czas zacząć kodować. Możesz użyć internetowego IDE Pythona Geekflare, aby śledzić te przykłady. Możesz też uruchomić je na swoim lokalnym komputerze.
Przykłady zrozumienia list w Pythonie
W poprzedniej sekcji utworzyłeś nową listę num_cubes
z nums
. Zacznijmy od przepisania tego za pomocą rozumienia listy.
Korzystanie ze zrozumienia listy z liczbami
Teraz użyjmy uproszczonej składni w następujący sposób:
-
<do-this>
: Tutaj musisz poszerzyć każdąnum
. Więc zamień<do-this>
nanum**3
. -
<all-items>
: Zmienna pętli tonum
— poszczególne liczby na liście. -
<this-list>
: Istniejąca lista tonums
. - A
[num**3 for num in nums]
jest wyrażeniem końcowym.
Podsumowując, mamy następujący fragment kodu:
num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]
Gratulacje, zakodowałeś swoje pierwsze rozumienie listy.
Idąc dalej, popracujmy z łańcuchami Pythona.
Korzystanie z list składanych z ciągami
Załóżmy, że masz authors
listy — możesz przepisać poniższą listę ze swoimi ulubionymi autorami.
authors = ["jane austen","george orwell","james clear","cal newport"]
Zwróć uwagę, że na powyższej liście nazwiska autorów są pisane małymi literami. Chcielibyśmy teraz sformatować je w wielkości liter i przechowywać na nowej liście o nazwie author_list
.
Uwaga: W Pythonie metoda string title() przyjmuje ciąg znaków jako argument i zwraca kopię ciągu sformatowanego w tytule. Oznacza to, że pierwsza litera każdego słowa jest pisana wielką literą:
First-name Last-name
Oto wszystko, co musisz zrobić:
- przejdź przez listę
authors
i dla każdegoauthor
na liście, - wywołaj
author.title()
, aby uzyskać kopię ciągu z zapisaną wielkością liter.
A kod Pythona do tego jest pokazany poniżej:
authors = ["jane austen","george orwell","james clear","cal newport"] author_list = [author.title() for author in authors] print(author_list) # Output ['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']
W powyższym wyniku przyjrzyj się, jak imiona i nazwiska wszystkich autorów zostały sformatowane w tytule — o co nam chodziło.

Korzystanie ze zrozumienia list z wieloma listami
Do tej pory nauczyłeś się używać rozumienia list do tworzenia nowych list z jednej istniejącej listy. Teraz nauczmy się tworzyć nową listę z wielu list.
Rozważmy na przykład następujący problem: Masz dwie listy l_arr
i b_arr
zawierające długości i szerokości 4 prostokątów.
I musisz utworzyć nowy area
listy, który zawiera obszar tych 4 prostokątów. Pamiętaj, area = length * breadth
.
l_arr = [4,5,1,3] b_arr = [2,1,7,9]
Do obliczenia powierzchni potrzebne będą elementy z obu list ( l_arr
i b_arr
). Możesz to zrobić za pomocą funkcji zip()
Pythona.
Uwaga: W Pythonie funkcja
zip()
przyjmuje jedną lub więcej iteracji jako argumenty ze składniązip(*iterables)
. Następnie zwraca iterator krotek, w których krotkai
zawiera elementi
z każdej iteracji.
Poniższy obraz opisuje to szczegółowo. Masz 4 wartości w l_arr
i b_arr
, więc zakres indeksów wynosi od 0 do 3. Jak widać, krotka 0
zawiera l_arr[0]
i b_arr[0]
, krotka 1
zawiera l_arr[1]
i b_arr[1]
i tak dalej.

Dlatego możesz przejść przez zip(l_arr,b_arr)
jak pokazano poniżej:
area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]
W następnej sekcji dowiesz się, jak używać instrukcji warunkowych wewnątrz list składanych.
Zrozumienie list w Pythonie ze składnią warunków
Zacznijmy od zbudowania poprzedniej składni dla rozumienia list.
Oto składnia:
<new_list> = [<expression> for <item> in <iterable> if <condition>]
Zamiast obliczać <expression>
dla wszystkich elementów, chciałbyś to zrobić tylko dla tych elementów, które spełniają określony <condition>
—gdzie, condition := True
. A to prowadzi do uproszczonej składni, jak pokazano:

Po tym przejdźmy do przykładów kodu.
Zrozumienie list w Pythonie z przykładami warunków
#1. Dostajesz ciąg „Uczę się Pythona w 2022” . Chciałbyś otrzymać listę wszystkich cyfr w tym ciągu. Więc jak to robisz?
W Pythonie
<char>.isdigit()
działa na znaku<char>
i zwracaTrue
, jeśli jest to cyfra (0-9); w przeciwnym razie zwracaFalse
.
Poniższy fragment kodu pokazuje, jak zebrać listę wszystkich cyfr w ciągu str1
.
str1 = "I'm learning Python3 in 2022" digits = [char for char in str1 if char.isdigit()] print(digits) # Output ['3', '2', '0', '2', '2']
W powyższym kodzie:
- zapętlisz łańcuch
str1
, - uzyskaj dostęp do każdego
char
, aby sprawdzić, czy jest to cyfra za pomocą metodyisdigit()
, oraz - dodaj
char
do nowychdigits
listy tylko wtedy, gdy jest to cyfra.
Weźmy inny przykład.
#2. Masz listę owoców. I chciałbyś utworzyć listę starts_with_b
zawierającą wszystkie owoce z listy fruits
, które zaczynają się na b
. Do napisania warunku można użyć metody startswith()
.
<str>.startswith('char')
zwracaTrue
, jeśli <str> zaczyna się od 'char'; w przeciwnym razie zwracaFalse
.
fruits = ['blueberry','apple','banana','orange','cherry'] starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')] print(starts_with_b) # Output ['blueberry', 'banana']
W powyższym wyniku otrzymujemy 'blueberry'
i 'banana'
które są dwoma owocami, które zaczynają się na 'b'
na liście fruits
, zgodnie z oczekiwaniami.
I to kończy naszą dyskusję na temat rozumienia listy.
Wniosek
Mam nadzieję, że ten samouczek pomógł ci zrozumieć listy składane w Pythonie.
Podsumujmy:
- Możesz użyć [<zrób to> dla <all-items> w <this-list>] , aby utworzyć nową listę przy użyciu rozumienia listy.
- Dodatkowo można użyć składni [<zrób to> dla <wszystkie-elementy> w <tej-liście> if <warunek-jest-prawda>] z instrukcją warunkową
if
.
Dodatkowo zakodowałeś również kilka przykładów. W następnym kroku możesz spróbować przepisać niektóre z istniejących pętli Pythona do tworzenia list przy użyciu rozumienia list. Udanego kodowania! Do następnego samouczka.
Możesz teraz przyjrzeć się, jak przekonwertować listę na słownik lub dowiedzieć się, jak obsługiwać pliki w Pythonie.