Академия Eduson

Анонимные функции. Часть 2

 Работа с анонимными функциями. Продолжение

 Что будет выведено в результате выполнения следующей программы?:

numbers = [1, 2, 5, 3, 4]
numbers.sort(key=lambda x: -x)

print(numbers)

 Ответ:  [5, 4, 3, 2, 1]

 Что будет выведено в результате выполнения следующей программы?:

primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
result = list(filter(lambda: True, primes))

print(result)

 Ответ:  произойдет ошибка

 Что будет выведено в результате выполнения следующей программы?:

primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
result = list(filter(lambda x: True, primes))

print(result)

 Ответ:  [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

 Что будет выведено в результате выполнения следующей программы?:

full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'

print(full_name('ben', 'affleck'))

 Ответ:  Full name: Ben Affleck

 Напишите функцию func, используя синтаксис анонимных функций, которая принимает целочисленный аргумент и возвращает значение True, если он делится без остатка на 19 или на 13 и False в противном случае.

func = lambda x: x % 19 == 0 or x % 13 == 0

 Напишите функцию func, используя синтаксис анонимных функций, которая принимает строковый аргумент и возвращает значение True, если переданный аргумент начинается и заканчивается на английскую букву a (регистр буквы неважен) и False в противном случае.

func = lambda x: x[0].lower() == 'a'and x[-1].lower() == 'a'

 Напишите функцию is_non_negative_num, используя синтаксис анонимных функций, которая принимает строковый аргумент и возвращает значение True, если переданный аргумент является неотрицательным числом (целым или вещественным), или False в противном случае.

is_non_negative_num = lambda x: x.replace('.','',1).isdigit() and float(x) >= 0

 Напишите функцию is_num(), используя синтаксис анонимных функций, которая принимает строковый аргумент и возвращает значение True, если переданный аргумент является числом (целым или вещественным), или False в противном случае.

is_num = lambda x: len(x)>1 and x[1:].replace('.', '').isdigit() and x.count('.') < 2 and x[0] in ('-', '0', '1', '2', '3' , '4', '5' , '6' , '7', '8', '9') or len(x)==1 and x.isdigit()

 Напишите программу, которая с помощью встроенных функций filter() и sorted() выводит слова из списка words, имеющие длину ровно 6 символов. Слова следует вывести в алфавитном порядке на одной строке, разделив символом пробела.

words = ['beverage', 'monday', 'abroad', 'bias', 'abuse', 'abolish', 'abuse', 'abuse', 'bid', 'wednesday', 'able', 'betray', 'accident', 'abduct', 'bigot', 'bet', 'abandon', 'besides', 'access', 'friday', 'bestow', 'abound', 'absent', 'beware', 'abundant', 'abnormal', 'aboard', 'about', 'accelerate', 'abort', 'thursday', 'tuesday', 'sunday', 'berth', 'beyond', 'benevolent', 'abate', 'abide', 'bicycle', 'beside', 'accept', 'berry', 'bewilder', 'abrupt', 'saturday', 'accessory', 'absorb']

print(*sorted(filter(lambda x: len(x) == 6, words)))

 Напишите программу, которая с помощью встроенных функций map() и filter() пошагово:

  •  Удаляет из списка numbers все нечетные элементы, бо́льшие 47;
  •  Делит все четные элементы нацело на 2 (целочисленное деление – //).

 Полученные числа следует вывести на одной строке, разделив символом пробела и сохранив исходный порядок.

numbers = [46, 61, 34, 17, 56, 26, 93, 1, 3, 82, 71, 37, 80, 27, 77, 94, 34, 100, 36, 81, 33, 81, 66, 83, 41, 80, 80, 93, 40, 34, 32, 16, 5, 16, 40, 93, 36, 65, 8, 19, 8, 75, 66, 21, 72, 32, 41, 59, 35, 64, 49, 78, 83, 27, 57, 53, 43, 35, 48, 17, 19, 40, 90, 57, 77, 56, 80, 95, 90, 27, 26, 6, 4, 23, 52, 39, 63, 74, 15, 66, 29, 88, 94, 37, 44, 2, 38, 36, 32, 49, 5, 33, 60, 94, 89, 8, 36, 94, 46, 33]

rez = list(map(lambda x: x//2 if x%2==0 else x, filter(lambda x: x%2==0 or (x%2!=0 and x<47), numbers)))

print(*rez)

 Список data содержит информацию о численности населения некоторых штатов США. Напишите программу сортировки по убыванию списка data на основании последнего символа в названии штата. Затем распечатайте элементы этого списка, каждый на новой строке в формате:

<название штата>: <численность населения>

Vermont: 626299
Massachusetts: 7029917
...
data = [(19542209, 'New York'), (4887871, 'Alabama'), (1420491, 'Hawaii'), (626299, 'Vermont'), (1805832, 'West Virginia'), (39865590, 'California'), (11799448, 'Ohio'), (10711908, 'Georgia'), (10077331, 'Michigan'), (10439388, 'Virginia'), (7705281, 'Washington'), (7151502, 'Arizona'), (7029917, 'Massachusetts'), (6910840, 'Tennessee')]

for i in sorted(data, key=lambda x: x[1][-1], reverse=True):
    print(f"{i[1]}: {i[0]}")

 Список data содержит слова на русском языке. Напишите программу, которая сортирует этот список по возрастанию длины слов. В случае, если длины каких-то слов совпадают, – отсортировать эти слова в лексикографическом порядке. Отсортированные слова следует вывести на одной строке, разделив символом пробела.

data = ['год', 'человек', 'время', 'дело', 'жизнь', 'день', 'рука', 'раз', 'работа', 'слово', 'место', 'лицо', 'друг', 'глаз', 'вопрос', 'дом', 'сторона', 'страна', 'мир', 'случай', 'голова', 'ребенок', 'сила', 'конец', 'вид', 'система', 'часть', 'город', 'отношение', 'женщина', 'деньги']

print(*sorted(data, key=lambda x: (len(x), x)))

 Список mixed_list содержит целочисленные и строковые значения. Напишите программу, которая с помощью встроенной функции max() находит и выводит наибольшее числовое значение в указанном списке.

mixed_list = ['tuesday', 'abroad', 'abuse', 'beside', 'monday', 'abate', 'accessory', 'absorb', 1384878, 'sunday', 'about', 454805, 'saturday', 'abort', 2121919, 2552839, 977970, 1772933, 1564063, 'abduct', 901271, 2680434, 'bicycle', 'accelerate', 1109147, 942908, 'berry', 433507, 'bias', 'bestow', 1875665, 'besides', 'bewilder', 1586517, 375290, 1503450, 2713047, 'abnormal', 2286106, 242192, 701049, 2866491, 'benevolent', 'bigot', 'abuse', 'abrupt', 343772, 'able', 2135748, 690280, 686008, 'beyond', 2415643, 'aboard', 'bet', 859105, 'accident', 2223166, 894187, 146564, 1251748, 2851543, 1619426, 2263113, 1618068, 'berth', 'abolish', 'beware', 2618492, 1555062, 'access', 'absent', 'abundant', 2950603, 'betray', 'beverage', 'abide', 'abandon', 2284251, 'wednesday', 2709698, 'thursday', 810387, 'friday', 2576799, 2213552, 1599022, 'accept', 'abuse', 'abound', 1352953, 'bid', 1805326, 1499197, 2241159, 605320, 2347441]

print(max(mixed_list, key=lambda x: x if isinstance(x,int) else 0))

 Список mixed_list содержит целочисленные и строковые значения. Напишите программу его сортировки по неубыванию значений элементов, при этом числа должны следовать до строк. Элементы отсортированного списка выведите на одной строке, разделив символом пробела.

mixed_list = ['beside', 48, 'accelerate', 28, 'beware', 'absorb', 'besides', 'berry', 15, 65, 'abate', 'thursday', 76, 70, 94, 35, 36, 'berth', 41, 'abnormal', 'bicycle', 'bid', 'sunday', 'saturday', 87, 'bigot', 41, 'abort', 13, 60, 'friday', 26, 13, 'accident', 'access', 40, 26, 20, 75, 13, 40, 67, 12, 'abuse', 78, 10, 80, 'accessory', 20, 'bewilder', 'benevolent', 'bet', 64, 38, 65, 51, 95, 'abduct', 37, 98, 99, 14, 'abandon', 'accept', 46, 'abide', 'beyond', 19, 'about', 76, 26, 'abound', 12, 95, 'wednesday', 'abundant', 'abrupt', 'aboard', 50, 89, 'tuesday', 66, 'bestow', 'absent', 76, 46, 'betray', 47, 'able', 11]

print(*sorted(mixed_list, key=lambda x: str(x)))

В цветовой схеме RGB цвета задаются с помощью трех компонентов:

  • R — интенсивность красной составляющей цвета;
  • G — интенсивность зеленой составляющей цвета;
  • B — интенсивность синей составляющей цвета.

 Противоположные цвета задаются как RGB и (255-R)(255-G)(255-B). Считается, что такие цвета хорошо гармонируют друг с другом.
 Напишите программу, которая по трем компонентам заданного цвета, находит компоненты противоположного цвета.

print(*list(map(lambda x: 255 - x, [int(i) for i in input().split()])))

 На вход программе на первой строке подаются коэффициенты многочлена, разделенные символом пробела и целое число x на второй строке. Напишите программу, которая вычисляет значение указанного многочлена при заданном значении x.

from functools import reduce as r

evalu = lambda cf, x: r(lambda v, c: c + v * x, map(int, cf))

print(evalu(input().split(), int(input())))