Академия Eduson

Функции высшего порядка

 Функции высшего порядка для обработки набора данных

 Функция высшего порядка это:

 Ответ: функция, которая принимает другие функции в качестве аргументов;  функция, которая возвращает в качестве результата работы другую функцию

 Как в математике называется функция 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