Как вводить в список сразу несколько числовых значений?
Цель: сделать так, чтобы пользователь вводил (уже после запуска кода) в список сразу несколько числовых значений, и при этом, чтобы они все были в формате чисел (int, как я понимаю), а не str.
Пытался сделать через такой код:
list=[int(input('Введите числа, из которых будет состоять список: '))]
print(list)
Но он работает только тогда, когда я ввожу лишь одно число, а мне нужно вводить сразу несколько. Когда я пытаюсь ввести несколько чисел мне пишет:
ValueError: invalid literal for int() with base 10: '1 2 3' - это числа, которые я пытаюсь ввести. Не важно, есть междуними запятая, или нет, всё равно ошибка :(
Помогите написать корректный код.
Ответы (3 шт):
Нам нужна функция split, которая разделяет введенную строку по пробелу (или по другому символу, но параметр по умолчанию - это пробел).
lst = input().split()
Но в таком случае введенные числа будут храниться, как строки.
Чтобы преобразовать их в тип int, мы можем либо использовать генератор списков:
lst = [int(i) for i in input().split()]
Либо функцию map, которая применяет определенную функцию (в нашем случае int) ко всем элементам списка:
lst = list(map(int, input().split()))
Самый примитивный способ при условии, что все вводимые данные будут числами:
list_data = [int(value) for value in input().split()]
print(list_data)
Пояснение:
- вводите числа через пробел.
- .split() - вернет список элементов, разделенных пробелом
- при помощи генератора вы пробегаетесь по каждому элементу и интуете их.
- Результат ложится в переменную list_data, где все числа будут интовыми
ЛИБО по сложнее, но с проверкой:
list_data = input().split()
int_lst = []
for element in list_data:
if element.isdigit():
int_lst.append(int(element))
else:
print(f'{element} - не является числом! ')
print('Ошибка формирования списка чисел!')
exit()
print(f'Ваш список чисел:', int_lst)
print(list(map(int, input('Введите числа, из которых будет состоять список: \n').split())))