Python. Використання вкладених конструкцій if та for в генераторах списків, множин та словників

Використання вкладених конструкцій if та 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']

 


Споріднені теми