Презентація "Генератор списків в Python"

Про матеріал
У мові програмування Python існує спеціальна синтаксична конструкція, яка дозволяє за певними правилами створювати заповнені списки. Такі конструкції називаються генераторами списків. Їх зручність полягає в більш короткій записи програмного коду, ніж якби створювався список звичайним способом. Незважаючи на те, що в деяких випадках без генераторів можна обійтися, їх грамотне застосування значно спрощує реалізацію складних алгоритмів. Ось кілька прикладів використання генераторів.
Зміст слайдів
Номер слайду 1

Генератор списків в Python. Навчання заради успіху. Вчитель інформатики В. Д. Партіка

Номер слайду 2

Розглянемо одну конструкцію мови, яка допоможе скоротити кількість рядків коду. Не рідко рівень програміста на Python можна визначити за допомогою цієї конструкції. Приклад коду:a =[]for x in range(5, 10): if x % 2 == 0: x *= 2 else: x += 1 a.append(x)print(a)А зараз спробуємо ці 8 рядків перетворити в два:[6, 12, 8, 16, 10]a = [x * 2 if x % 2 == 0 else x + 1 for x in range(5, 10)]print(a)[6, 12, 8, 16, 10]

Номер слайду 3

Генератори списків - це простий і лаконічний спосіб створення списків з інших ітеріруемих об'єктів. Найпростіший генератор складається з виразу і циклу, які потрібно помістити в квадратні дужки:a = [x**2 for x in range(10)]print(a)[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Так само вираз може містити будь-яку кількість змінних, але в цьому випадку для кожної змінної оголошується окремий цикл і вказується власний ітеріруемий об'єкт:a = [x + y for x in range(1, 4) for y in range(5, 10)]print(a)[6, 7, 8, 9, 10, 7, 8, 9, 10, 11, 8, 9, 10, 11, 12]

Номер слайду 4

Даний генератор імітує поведінку вкладених циклів for, тобто список отриманий вище може бути створений ось так:a = []for x in range(1, 4): for y in range(5, 10): a.append(x + y)print(a) [6,7,8,9,10,7,8,9,10,11,8,9,10,11,12]

Номер слайду 5

Кількість ітерацій внутрішніх циклів може залежати від зовнішніх циклів, наприклад:a = [str(x) + str(y) for x in range(3) for y in range(x+3)]['00','01','02','10','11','12','13','20','21','22','23','24']Що аналогічно наступному коду:a = []for x in range(3): for y in range(x + 3): a.append(str(x) + str(y))print(a)['00','01','02','10','11','12','13','20','21','22','23','24']

Номер слайду 6

Більш наочно роботу генератора можна розглянути на прикладі генерації списку випадкових чисел. Для цього перш за все імпортуємо модуль random:import random  # імпорт модуляr = [random.randint(-20, 20) for x in range(20)]  # виклик методу randint (-20, 20) для генерації випадкових чисел в зазначеному деапазонеprint(r) # вивід:[12, 10, 14, 19, -14, 19, 17, 2, -17, -10, 0, 2, -16, -12, 5, -3, -8, 7, 18, -3]

Номер слайду 7

У генератор списку можна додати умову:from random import randinta = [randint(10, 20) for i in range(10)]print(a)#[18, 17, 11, 11, 15, 18, 11, 20, 10, 19]b = [i for i in a if i%2 == 0]print(b)#[18, 18, 20, 10]

Номер слайду 8

Генератори списків можуть містити вкладені цикли:a = "12"b = "3"c = "456"comb = [i+j+k for i in a for j in b for k in c]print(comb) ['134', '135', '136', '234', '235', '236']

Номер слайду 9

Вкладені генератори, можуть бути використані для створення різних матриць:# створюємо квадратну матрицюn = 4a = [[i for i in range(j,j+n)] for j in range(0,n**2-1, n)]print(a)[[0,1,2,3], [4,5,6,7], [8,9,10,11], [12,13,14,15]]# створюємо прямокутну матрицюl, k = 3, 6a = [[i for i in range(j, j + k)] for j in range(0, l*k-1, k)]print(a)[[0,1,2,3,4,5], [6,7,8,9,10,11], [12,13,14,15,16,17]]

Номер слайду 10

Генератори з умовою if# числа кратные 17:a = [x for x in range(100) if x % 17 == 0]print(a) [0, 17, 34, 51, 68, 85]Робота цього генератора аналогічна роботі наступного циклу з умовою:a = []for x in range(100): if x % 17 == 0: a.append(x)print(a) [0, 17, 34, 51, 68, 85]

Номер слайду 11

Перейдемо до коду: y = [8 for x in range(1,10)] # 8 -це найпростіше вираження, range (1,10) - колекція, генерує значення від 1 до 9 включноprint(y) # вивід: [8, 8, 8, 8, 8, 8, 8, 8, 8]Якщо замість виразу 8 підставити значення x, наш список заповниться цифрами від 1 до 9:y = [x for x in range(1,10)] # x прийме значення від 1 до 10print(y) # вивід:[1, 2, 3, 4, 5, 6, 7, 8, 9]Те ж справедливо і для x в квадраті:y = [x**2 for x in range(1,10)]print(y) # вивід:[1, 4, 9, 16, 25, 36, 49, 64, 81]

Номер слайду 12

Подібні операції можливі і з рядками:s = [x for x in "mylist"]print(s) # вивід:['m', 'y', 'l', 'i', 's', 't'] # список строкових символів # Дублювання строкових символів s = [x * 4 for x in "mylist"]print(s)  # вивід:['mmmmm', 'yyyyy', 'lllll', 'iiiii', 'sssss', 'ttttt']

Номер слайду 13

В якості вираження в генератор можна передавати будь-яку функцію, візьмемо для прикладу функцію list (), що перетворює кожен елемент списку в окремий список:f = [list(i) for i in "Hello. World"]print(f)  # вивід: [['H'], ['e'], ['l'], ['l'], ['o'], ['W'], ['o'], ['r'], ['l'], ['d']]

Номер слайду 14

Генератори підтримують можливість роботи з умовами, в даному випадку шаблон генератора виглядає так:# [Вираз for x in колекція if умова]r2 = [x for x in r if x%2==0 ]  # знаходження всіх парних чисел в списку rprint(r2) # вивід: [12, 10, 14, -14, 2, -10, 0, 2, -16, -12, -8, 18]

Номер слайду 15

Вправа: генератори списків. На вході програма отримує список цілих чисел s. Ваше завдання - вивести наступні списки по одному в рядку: Список, що складається з квадратів s. Список, що складається із залишків поділу на 11 елементів s. Список, що складається тільки з парних елементів s. Список, що складається тільки з елементів s з непарним кількістю цифр. Список, що складається тільки з двозначних елементів s, записаних 2 рази поспіль. Список, що складається з елементів s, що стоять на позиціях, що не кратних 3. Вхідні дані: У єдиному рядку записані числа, розділені пробілами. s = [8, 5, 15, 101, 42, 1]Вихідні дані: У кожній з шести рядків виведіть відповідний список у стандартному форматі python'а.[64, 25, 225, 10201, 1764, 1][8, 5, 4, 2, 9, 1][8, 42][8, 5, 101, 1][1515, 4242][5, 15, 42, 1]

Номер слайду 16

Розв’язок вправи:s = [8, 5, 15, 101, 42, 1]s1 = [i ** 2 for i in s]print(s1)s2 = [i % 11 for i in s]print(s2)s3 = [i for i in s if i%2 == 0]print(s3)s4 =[i for i in s if 1 <=i<= 9 or 99

Номер слайду 17

Python - це маленький початок великих справ. Дякуємо!mahalaschool.com.ua

pptx
Додано
20 березня 2021
Переглядів
1416
Оцінка розробки
Відгуки відсутні
Безкоштовний сертифікат
про публікацію авторської розробки
Щоб отримати, додайте розробку

Додати розробку