Використання вкладених конструкцій if та for в генераторах списків, множин та словників
Зміст
- 1. Вкладені конструкції if та for в генераторах списків, множин та словників. Загальні поняття
- 2. Приклади з використанням розширеної конструкції if
- 3. Приклади з використанням вкладеної конструкції for
- Споріднені теми
1. Вкладені конструкції if та for в генераторах списків, множин та словників. Загальні поняття
У генераторах списків, множин та словників можна використовувати:
- конструкції if з метою фільтрування результуючих даних;
- вкладені конструкції for з метою обходу потрібних даних.
⇑
2. Приклади з використанням розширеної конструкції if
2.1. Формування словника на основі двох списків
Задача. Задано 2 списки L1 та L2 однакової довжини. Утворити словник D, в якому елементи списку L1 є ключами, а елементи списку L2 є значеннями. В словник включити тільки ті елементи, в яких ключі знаходяться в діапазоні [5; 10].
Розв’язок.
# Генератори словників та вкладені конструкції if # Задано 2 списки numbers = [ 12, 8, 3, 10, 7, 19 ] strings = [ '1', '22', '333', '4444', '55555', '666666' ] # Утворити словник, в якому ключі (keys) знаходяться в межах [5; 10] D = { k:v for (k,v) in zip(numbers, strings) if ((k>=5) and (k<=10)) } # Вивести словник D print(D)
Результат виконання програми
{8: '22', 10: '4444', 7: '55555'}
⇑
2.2. Формування множини, що містить тільки парні числа
Умова задачі. Задано список випадкових чисел. На основі цього набору утворити множину, яка містить тільки парні числа.
Розв’язок.
# Генератори множин та вкладені конструкції if # 1. Підключити модуль random import random # 2. Задати кількість чисел n = int(input("n = ")) # 3. Створити список з n чисел, кожне число в межах [1; 10] L = [ random.randint(1, 10) for t in range(1, n+1) ] # 4. Утворити множину, в якій тільки парні елементи S = { x for x in L if x%2 == 0 } # 5. Вивести результат print("L = ", L) print("S = ", S)
Результат виконання програми
n = 12 L = [5, 9, 10, 4, 2, 4, 7, 10, 3, 6, 10, 2] S = {10, 2, 4, 6}
⇑
2.3. Формування списку на основі двох списків згідно з умовою
Умова задачі. Задано два списки рядків L1 та L2. На основі цих списків утворити третій список L3, який містить тільки ті рядки, довжина яких перевищує 3 символи.
Розв’язок.
# Генератори списків та вкладені конструкції if # 1. Задано 2 списки L1 = [ 'abc', 'abcd', '1232', '5555', '200', 'jk' ] L2 = [ 'jklmn', 'jprst', 'aaa', '77' ] # 2. Створити результуючий список # 2.1. Отримати підсписок результатів на основі списку L1 ResL1 = [ item for item in L1 if len(item)>3 ] # 2.2. Отримати підсписок результатів на основі списку L2 ResL2 = [ item for item in L2 if len(item)>3 ] # 2.3. Отримати результуючий список ResL = ResL1 + ResL2 # 3. Вивести результат print("ResL = ", ResL)
Результат виконання програми
ResL = ['abcd', '1232', '5555', 'jklmn', 'jprst']
⇑
3. Приклади з використанням вкладеної конструкції for
3.1. Використання вкладених конструкцій for у генераторах словників
У прикладі демонструються різні способи отримання словника на основі генератора словника з вкладеною конструкцією for.
# Вкладені конструкції for у словниках # 1. Утворити словник з заданого діапазону D1 = { k : v for k in range(1, 4) for v in range(10, 13) } print("D1 = ", D1) # 2. Утворити словник на основі двох інших списків D2 = { k : v for k in ['a', 'b', 'c'] for v in [7, 8, 9] } print("D2 = ", D2)
Результат виконання програми
D1 = {1: 12, 2: 12, 3: 12} D2 = {'a': 9, 'b': 9, 'c': 9}
Як видно з результату, до словника додаються не всі можливі варіанти пар k:v. Це пов’язано з тим, що в словниках не допускається появи дублікатів.
⇑
3.2. Використання вкладених циклів for у генераторах множин
У прикладі демонструється використання вкладених циклів for у генераторах множин для розв’язування наступних задач:
- утворити множину, яка включає суму всіх можливих значень з заданих списків;
- утворити всі можливі набори символів з двох довільних рядків.
# Генератори множин та вкладені конструкції for # 1. Задано 2 списки L1 = [ 1, 3, 5, 5, 7, 8, 9 ] L2 = [ 3, 3, 4, 5, 6, 7, 8, 9 ] # 2. Утворити множину, що включає суму всіх можливих значень зі списків L1, L2 S = { x + y for x in L1 for y in L2 } print(S) # 3. Утворити множину пар зі значень символьного набору S2 = { (x, y) for x in 'ab' for y in '12' } print(S2)
Результат виконання програми
{4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18} {('b', '2'), ('a', '1'), ('a', '2'), ('b', '1')}
⇑
3.3. Використання вкладених циклів for у генераторах списків
Демонструється використання вкладеної конструкції for в генераторі списків. Розв’язуються наступні задачі:
- утворити список, кожен елемент якого є поелементною сумою двох кортежів;
- на основі двох списків рядків утворити новий список, що містить спільні для обох списків рядки.
# Генератори списків та вкладені конструкції for # 1. Задано 2 кортежі T1 = ( 7.2, 8.1, 3.5, 4.4, 2.9 ) T2 = ( 1.6, 0.8, 9.1, 3.3, 8.2 ) # 2. Утворити список, що є поелементною сумою двох кортежів L1 = [ T1[p1]+T2[p2] for p1 in range(len(T1)) for p2 in range(len(T2)) if p1==p2 ] print(L1) # 3. Утворити список, який містить рядки, що є однаковими у двох списках S1, S2 S1 = [ '12', '34', '56', '23' ] S2 = [ '78', '90', '12', '34', '77' ] L2 = [ S1[p1] for p1 in range(len(S1)) for p2 in range(len(S2)) if S1[p1]==S2[p2] ] print(L2)
Результат виконання програми
[8.8, 8.9, 12.6, 7.7, 11.1] ['12', '34']
⇑
Споріднені теми
- Генератори списків. Загальні поняття
- Генератори списків для матричних операцій. Приклади
- Функції-генератори. Інструкція yield. Методи next(), iter(), send()
- Вирази-генератори. Відмінність між виразом-генератором та генератором списків
- Використання стандартних функцій у поєднанні з виразами-генераторами. Функції sum(), sorted(), map(), all(), any(), min(), max(), filter(), zip(), enumerate()
- Генератори множин. Генератори словників. Множини та вирази-генератори. Словники та вирази-генератори. Приклади