Map int input split python 3 что это
Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности
Public user contributions licensed under cc-wiki license with attribution required
Ввод данных на Python
Возникла проблема с вводом данных, до этого не работал на сайте и при вводе мне не понятно как это делать. Вместо стандартного int(input()) я встретил ввод map(int, input().split()) . Объясните пожалуйста.
Отслеживать
76.7k 6 6 золотых знаков 54 54 серебряных знака 120 120 бронзовых знаков
задан 6 мар 2019 в 17:52
23 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака
Что именно непонятно? input() возвращает строку, split() делит строку по пробелам и выдаёт список, map вызывает указанную функцию для каждого элемента указанного списка и возвращает новый список (точнее итератор). Про всё это вы легко можете прочитать в любой документации и в любом учебнике по Python
6 мар 2019 в 18:00
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
map(int, input().split()) можно использовать в случае, если вводится несколько чисел через разделитель (в данном случае через пробел)
- input() возвращает строку (например: «1 2 3» )
- split() преобразует строку в list по разделителю — по умолчанию это пробел (результат: [«1», «2» ,»3″] )
- map преобразует список в соответствие с функцией — в данном случае int(elem) (результат: [1, 2 , 3]
В результате выполнения кода получится объект map , который хорошо бы еще было обернуть в list ( list(map(. ))
Отслеживать
ответ дан 6 мар 2019 в 18:31
ChocolateSwan ChocolateSwan
814 5 5 серебряных знаков 8 8 бронзовых знаков
Можно еще добавить что list(map(int, input().split())) тоже самое что [int(i) for i in input().split()] . А еще, split без параметров делит не просто по пробелам, а по их множеству: ‘1 2 3’.split() -> [‘1’, ‘2’, ‘3’] , а вот строго по пробелу: ‘1 2 3’.split(» «) -> [‘1’, », », ‘2’, ‘3’] . И еще, просто map удобно использовать если известно количество элементов, например если их 3: a, b, c = map(int, input().split()) , но при желании можно обработать и сколько угодно: a, *b = map(int, input().split()) — первое числор попадет в a , а все остальные как список в b
Программирование в «Эврике»
В языке Python имеется встроенная функция input(), с помощью которой можно читать ввод пользователя. Эта функция принимает необязательный строковый аргумент (который выводится в консоли как строка приглашения к вводу) и ожидает, пока пользователь введет ответ и завершит ввод клавишей Enter (или Return). Если пользователь не введет никакой текст и просто нажмет клавишу Enter, функция input() вернет пустую строку, в противном случае она возвращает строку, содержащую ввод пользователя без символа завершения строки.
Таким образом, все, что ввел пользователь, можно считать в одну строковую переменную с помощью команды
s = input()
Если предполагается, что вводится число (а не набор символов), придется преобразовать входную строку к числовому типу:
n = int(input()) # для целых
d = float(input()) # для дробных чисел
Если в строке вводится не одно число, а сразу несколько (например, четыре), придется воспользоваться функцией map:
a, b, c, d = map (int, input().split())
Что при этом происходит?
input().split() — разделить строку на части по пробелам
map — применить
int — эту операцию (преобразование в число) к каждой части
input().split() — разделить строку на части по пробелам.
Функциональное программирование
Функциональное программирование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).wiki
Функция высшего порядка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата.
map() — применить функцию ко всем элементам списка
map(function_to_apply, iterable, . ) — применяет функцию _function_to_apply ко всем элементам последовательности iterable. Если заданы дополнительные аргументы (последовательности), то функция function_to_apply должна принимать столько аргументов, сколько последовательностей переданно далее в map.
a = map(int, input().split()) # 3 14 27 -1
Далее по полученному объекту типа map можно итерироваться.
for x in a: print(x) # 3 # 14 # 27 # -1
Еще о различиях map и list:
>>> a = map(int, input().split()) 3 14 27 -1 # ввели эти числа >>> a # map - это не список 0xffd87170> >>> print(a) 0xffd87170> >>> b = list(a) # но из map можно получить list >>> b [3, 14, 27, -1] >>> c = list(a) >>> c # итерироваться можно только ОДИН раз. []
map — пример: квадраты чисел
Посчитаем квадраты чисел, заданных в списке.
items = [1, 2, 3, 4, 5] squared = [] for i in items: squared.append(i**2)
items = [1, 2, 3, 4, 5] squared = list(map(lambda x: x**2, items))
map — пример: задаем числа и их степени
Возведем числа из списка в степени, которые тоже заданы списком
items = [10, 2, 3, 4] n = [ 3, 1, 2, 0] res = [] for i, x in enumerate(items): res.append(x**n[i]))
items = [10, 2, 3, 4] n = [ 3, 1, 2, 0] res = list(map((lambda x, i: x**i), items, n))
map — список входных данных может быть списком функций
def multiply(x): return (x*x) def add(x): return (x+x) funcs = [multiply, add] for i in range(5): value = list(map(lambda x: x(i), funcs)) print(value) # Вывод: # [0, 0] # [1, 2] # [4, 4] # [9, 6] # [16, 8]
filter() — оставить те элементы, для которых True фильтрующая фукнция
filter(filter_function, list_of_inputs) — оставить только те элементы списка list_of_inputs, у которых применение функции filter_function вернуло True.
number_list = range(-5, 5) less_than_zero = list(filter(lambda x: x < 0, number_list)) print(less_than_zero) # Вывод: [-5, -4, -3, -2, -1]
filer похож на цикл, но он является встроенной функцией и работает быстрее.
reduce() — свертка списка с помощью функции
В Python 3 встроенной функции reduce() нет, но её можно найти в модуле functools.
reduce(function_to_apply, list_of_inputs, init_value) — сворачивает элементы списка list_of_inputs в один объект, применяя function_to_apply по очереди к последовательным парам элементов. Предполагая для первой пары init_value — необязательный параметр.
Найдем произведение чисел из списка. Классический вариант:
product = 1 list = [1, 2, 3, 4] for num in list: product = product * num # product = 24
from functools import reduce product = reduce((lambda res, x: res * x), [1, 2, 3, 4]) # 24 product = reduce((lambda res, x: res * x), [1, 2, 3, 4], 1) # эквивалентно
(((2*3)*4)*5)*6
Цепочка вызовов связывается с помощью промежуточного результата (res). Если список пустой, просто используется третий параметр (в случае произведения нуля множителей это 1):
reduce(lambda res, x: res*x, [], 1) # 1
Реверс списка (если забыли про функцию reversed):
>>> reduce(lambda res, x: [x]+res, [1, 2, 3, 4], []) [4, 3, 2, 1]
sum — сумма элементов списка
all
all(iterable) — возвращает True если все элементы в iterable истины (или этот iterable пустой). То же самое, что:
def all(iterable): for element in iterable: if not element: return False return True
any
any(iterable) — возвращает True если хоть один элемент в iterable истин (если этот iterable пустой, возвращается False). То же самое, что:
def any(iterable): for element in iterable: if element: return True return False