Использование вложенных конструкций 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' ] # Образовать словарь, в котором ключи находятся в пределах [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. Образовать множество, включающее сумму всех возможных значений из списков 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()
- Генераторы множеств. Генераторы словарей. Множества и выражения-генераторы. Примеры
⇑