CodeGym /Kursy /Python SELF PL /Generowanie list

Generowanie list

Python SELF PL
Poziom 7 , Lekcja 7
Dostępny

7.1 Mnożenie

W Pythonie jest wygodna składnia, która pozwala zwiększać ilość elementów. Do tego używamy prostego operatora mnożenia.

Generowanie stringów

Można go zastosować do stringów:


print("Mama" * 5)  # wyświetli MamaMamaMamaMamaMama
        

Albo można, na przykład, szybko wyświetlić linię oddzielającą:


print("-" * 40)  # wyświetli ----------------------------------------
        

Generowanie list

Można też mnożyć ilość elementów na liście:


print(["apple"] * 5)  # wyświetli ['apple', 'apple', 'apple', 'apple', 'apple']
        

Ten operator ma też bardziej praktyczne zastosowanie. Na przykład, chcesz stworzyć listę z 10 elementów, wypełnioną zerami:


alist = [0] * 10
print(alist)  # wyświetli [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
        

Można nawet zrobić dwuwymiarową tablicę. Na przykład, chcesz stworzyć tablicę 20x10, wypełnioną zerami. To równie proste:


alist = [[0] * 10] * 20 
print(alist)  # wyświetli [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...]
        

Bardzo wygodne, prawda?

7.2 List Comprehension

W Pythonie mamy taki przydatny narzędzie, jak „List Comprehension” — to wygodny i kompaktowy sposób tworzenia list. To narzędzie składniowe pozwala generować nowe listy, stosując wyrażenie do każdego elementu iterowalnego obiektu w jednej krótkiej linii kodu.

Łatwiej pokazać niż opisywać. To narzędzie składniowe wygląda tak:


[wyrażenie for zmienna in sekwencja]

Gdzie:

  • zmienna — identyfikator jakiejś zmiennej,
  • sekwencja — sekwencja wartości, które przyjmuje dana zmienna (to może być lista, string lub obiekt uzyskany za pomocą funkcji range),
  • wyrażenie — jakieś wyrażenie, zwykle zależne od użytej w generatorze zmiennej, którym będą wypełnione elementy listy.

Ważne! Całe wyrażenie powinno być ujęte w nawiasy kwadratowe.

Oto kilka przykładów użycia generatorów:

Stworzyć listę składającą się z n zer, można i przy użyciu generatora:


alist = [0 for i in range(100)]
        

Stworzyć listę wypełnioną kwadratami liczb całkowitych, można tak:


n = 5
alist = [i ** 2 for i in range(n)]            
        

Stworzyć listę wypełnioną liczbami całkowitymi od 1 do n:


n = 10
alist = [i + 1 for i in range(n)]
        

A oto sposób na uzyskanie listy wypełnionej losowymi liczbami od 1 do 9 (używając funkcji randrange() z modułu random):


from random import randrange

n = 10
alist = [randrange(1, 10) for i in range(n)]
        

7.3 Pętla w List Comprehension

List Comprehension można użyć nie tylko do generowania list. W zasadzie, to po prostu kompaktowy sposób zapisu pętli for.

Na przykład, z jego pomocą można po prostu wyświetlić pewne wartości z listy na ekran:


alist = ["apple", "banana", "cherry"]
[print(x) for x in alist]
        

Albo nawet można wprowadzić wartości z klawiatury:


a = [input() for i in range(int(input()))]
        

W tym przykładzie lista będzie się składała z stringów, wczytanych ze standardowego wejścia: najpierw trzeba wprowadzić liczbę elementów listy (ta wartość zostanie użyta jako argument funkcji range), a potem — określoną liczbę stringów.

W bardziej klasycznym stylu ten kod wyglądałby tak:


n = int(input())
a = []
for i in range(n):
    x = input()  
    a.append(x)
        

Ogólnie rzecz biorąc, możliwości List Comprehension są całkiem duże:

Można używać warunków:

Włączenie warunków do wyrażenia pozwala filtrować elementy, na przykład, można stworzyć listę tylko z parzystych liczb:


[x for x in range(10) if x % 2 == 0]
        

Zagnieżdżone pętle:

Generator pozwala używać zagnieżdżonych pętli, na przykład, do tworzenia wielowymiarowych tablic:


[(x, y) for x in range(3) for y in range(3)]
        
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION