#map(function, iterable, [iterable 2, iterable 3, ...])

# Встроенная в Python функция map() используется для применения функции к каждому элементу итерируемого объекта
# (например, списка или словаря) и возврата нового итератора для получения результатов.
# Функция map() возвращает объект map (итератор),
# который мы можем использовать в других частях нашей программы. Также мы можем передать объект map в функцию list() 
# или другой тип последовательности для создания итерируемого объекта.


a = [-10, -5, 0, 10, 20, 30]

b = list(map(abs, a))

#b = [abs(i) for i in a] - делают тоже самое
print('list(map(abs, a)) => ', b) #[10, 5, 0, 10, 20, 30] - ко всем эл колекции "а" прменили фунфунк - abs()

a = ['hi', 'how', 'are', 'U']

#print(list(map(len, a))) - можно сразу обернуть в print()
b = list(map(len, a))

print('b = list(map(len, a)) =>', b) #b = list(map(len, a)) => [2, 3, 3, 1]

#так же можно использовать встроенные объекты - str - для строк

a = ['hi', 'how', 'are', 'U']

b = list(map(str.upper, a))
print('b = list(map(str.upper, a)) =>', b) # ['HI', 'HOW', 'ARE', 'U']

# использование анонимной lambda x, функции

a = ['Hi', 'How', 'Are', 'U!']


#при использовании lambda функции нужно использовать, аргумент : вырвжение

b = list(map(lambda x: x[::-1], a)) #b = list(map(lambda x: x[::-1], a)) => ['iH', 'woH', 'erA', '!U']


#x[::-1] - берем полный срез и разворачиваем его наоборот

#b = [i[::-1] for i in a] - aльтернативный синтаксис
print("b = list(map(lambda x: x[::-1], a)) =>", b) #['iH', 'woH', 'erA', '!U']
b = list(map(lambda x: x + "!!!", a)) #['Hi!!!', 'How!!!', 'Are!!!', 'U!!!!']
print("b = list(map(lambda x: x + '!!!', a)) =>", b) #[['H', 'i'], ['H', 'o', 'w'], ['A', 'r', 'e'], ['U', '!']]
b = list(map(list, a))

print("b = list(map(list, a)) =>", b) #b = list(map(list, a)) => [['H', 'i'], ['H', 'o', 'w'], ['A', 'r', 'e'], ['U', '!']]
c = list(map(sorted, b))
print("c = list(map(sorted, b)) =>", c) #[['H', 'i'], ['H', 'o', 'w'], ['A', 'e', 'r'], ['!', 'U']]

# можно передавать встроенные функции abs() так и созданные def func()
def f(x):

return x ** 2

a = [-10, -5, 0, 10, 20, 30]

b = list(map(f, a))
print(f'{a} ** 2 =', b) #[-10, -5, 0, 10, 20, 30] ** 2 = [100, 25, 0, 100, 400, 900]


# массовый ввод переменных, возможность ввести нескоько чисел через пробел
s = list(map(int, input().split()))