Функции высшего порядка
Функции высшего порядка для обработки набора данных
Функция высшего порядка это:
Ответ: функция, которая принимает другие функции в качестве аргументов; функция, которая возвращает в качестве результата работы другую функцию
Как в математике называется функция reduce()?
Ответ: левая свёртка
Какая функция позволяет получить список элементов, преобразованных в соответствии с заданной функцией?
Ответ: map()
Какая функция позволяет отфильтровать элементы списка с помощью функции-предиката?
Ответ: filter()
Что выведет приведенный ниже код?:
def high_order_function(func): return func(10) def square(x): return x**2 def minus_one(x): return x - 1 num1 = high_order_function(square) num2 = high_order_function(minus_one) print(num1*num2)
Ответ: 900
Что выведет приведенный ниже код?:
words = ['abba', 'qwerty', 'python', 'a', 'deed', 'nun', 'level', 'deified', 'bbbbb', 'mother', 'surface', 'sister'] words_len = map(len, words) print(max(words_len))
Функция map():
def map(function, items): result = [] for item in items: result.append(function(item)) return result
Ответ: 7
Что выведет приведенный ниже код?:
def predicate(word): return word == word[::-1] words = ['abba', 'qwerty', 'python', 'a', 'deed', 'nun', 'level', 'language', 'deified', 'bbbbb', 'mother', 'sister', 'surface', '1234321'] filtered = filter(predicate, words) print(len(filtered))
Функция filter():
def filter(function, items): result = [] for item in items: if function(item): result.append(item) return result
Ответ: 8
Что выведет приведенный ниже код?:
numbers = [-2, 45, 45, -7, -45, 37, -42, 27, -58, -58, -12, -27, -49, -27, -56, 4, -99, -11, 86] var1 = max(numbers, key=abs) var2 = min(map(abs, numbers)) print(var1 + var2)
Функция map():
def map(function, items): result = [] for item in items: result.append(function(item)) return result
Ответ: -97
Напишите программу, которая с помощью функции map() округляет все элементы списка numbers до 2 десятичных знаков, а затем выводит их, каждый на отдельной строке.
def map(function, items): result = [] for item in items: result.append(function(item)) return result numbers = [3.56773, 5.57668, 4.00914, 56.24241, 9.01344, 32.12013, 23.22222, 90.09873, 45.45, 314.1528, 2.71828, 1.41546] v= map(lambda x: round(x, 2), numbers) print(*v, sep='\n')
Напишите программу, которая с помощью функций filter() и map() отбирает из заданного списка numbers трёхзначные числа, дающие при делении на 5 остаток 2, и выводит их кубы, каждый в отдельной строке.
def map(function, items): result = [] for item in items: result.append(function(item)) return result def filter(function, items): result = [] for item in items: if function(item): result.append(item) return result num = [1014, 1321, 675, 1215, 56, 1386, 1385, 431, 1058, 486, 1434, 696, 1016, 1084, 424, 1189, 475, 95, 1434, 1462, 815, 776, 657, 1225, 912, 537, 1478, 1176, 544, 488, 668, 944, 207, 266, 1309, 1027, 257, 1374, 1289, 1155, 230, 866, 708, 144, 1434, 1163, 345, 394, 560, 338, 232, 182, 1438, 1127, 928, 1309, 98, 530, 1013, 898, 669, 105, 130, 1363, 947, 72, 1278, 166, 904, 349, 831, 1207, 1496, 370, 725, 926, 175, 959, 1282, 336, 1268, 351, 1439, 186, 273, 1008, 231, 138, 142, 433, 456, 1268, 1018, 1274, 387, 120, 340, 963, 832, 1127] def aa(x): return 99 < x < 1000 and x % 5 == 2 def cube(x): return x**3 f = filter(aa, num) m = map(cube, f) print(*m, sep='\n')
Напишите программу для вычисления и вывода суммы квадратов элементов списка numbers.
def reduce(operation, items, initial_value): acc = initial_value for item in items: acc = operation(acc, item) return acc num = [97, 42, 9, 32, 3, 45, 31, 77, -1, 11, -2, 75, 5, 51, 34, 28, 46, 1, -8, 84, 16, 51, 90, 56, 65, 90, 23, 35, 11, -10, 70, 90, 90, 12, 96, 58, -8, -4, 91, 76, 94, 60, 72, 43, 4, -6, -5, 51, 58, 60, 30, 38, 67, 62, 36, 72, 34, 82, 62, -1, 60, 82, 87, 81, -7, 57, 26, 36, 17, 43, 80, 40, 75, 94, 91, 64, 38, 72, 29, 84, 38, 35, 7, 54, 31, 95, 78, 27, 82, 1, 64, 94, 31, 29, -8, 98, 24, 61, 7, 73] def squ(x, y): return x + y ** 2 v = reduce(squ, num, 0) print(v)
Напишите программу для вычисления и вывода суммы квадратов двузначных чисел из списка numbers, которые делятся на 7 без остатка.
def map(function, items): result = [] for item in items: result.append(function(item)) return result def filter(function, items): result = [] for item in items: if function(item): result.append(item) return result num = [77, 293, 28, 242, 213, 285, 71, 286, 144, 276, 61, 298, 280, 214, 156, 227, 228, 51, -4, 202, 58, 99, 270, 219, 94, 253, 53, 235, 9, 158, 49, 183, 166, 205, 183, 266, 180, 6, 279, 200, 208, 231, 178, 201, 260, -35, 152, 115, 79, 284, 181, 92, 286, 98, 271, 259, 258, 196, -8, 43, 2, 128, 143, 43, 297, 229, 60, 254, -9, 5, 187, 220, -8, 111, 285, 5, 263, 187, 192, -9, 268, -9, 23, 71, 135, 7, -161, 65, 135, 29, 148, 242, 33, 35, 211, 5, 161, 46, 159, 23, 169, 23, 172, 184, -7, 228, 129, 274, 73, 197, 272, 54, 278, 26, 280, 13, 171, 2, 79, -2, 183, 10, 236, 276, 4, 29, -10, 41, 269, 94, 279, 129, 39, 92, -63, 263, 219, 57, 18, 236, 291, 234, 10, 250, 0, 64, 172, 216, 30, 15, 229, 205, 123, -105] def aa(x): if (9 < abs(x) < 100) and x % 7 ==0: return x def kv(x): return x**2 v = filter(aa, num) m = map(kv, v) print(sum(m))
Напишите функцию func_apply(), принимающую на вход функцию и список значений и возвращающую список, в котором каждое значение будет результатом применения переданной функции к переданному списку.
def func_apply(func, args): rez = [] for arg in args: rez.append(func(arg)) return rez