Создание списка с помощью ввода данных
Ввод списка в Python: основные подходы
Как эффективно ввести список чисел одной строкой?
Самый распространённый способ - использовать функцию input() вместе с методом split(). Пользователь вводит числа через пробел, затем строка разбивается на части, и каждая преобразуется в целое число.
# Ввод: 10 20 30 40
s = input()
nums = list(map(int, s.split()))
print(nums)Input списка python (ввод списка в python)
[10, 20, 30, 40]
Пояснение шагов:
input()считывает строку до нажатия Enter.split()разделяет строку по пробельным символам, возвращая список подстрок.map(int, ...)применяет функцию int к каждому элементу.list()создаёт из отображения список.
Типичная ошибка: если пользователь введёт нечисловое значение (например, "10 abc 30"), возникнет ValueError. Решение - добавить проверку или использовать обработку исключений.
Как ввести список строк, разделённых запятыми?
Измените разделитель в split():
data = input().split(',')
print(data)
['apple', 'banana', 'cherry']
Если после запятой могут быть пробелы, используйте strip() для каждого элемента:
data = [x.strip() for x in input().split(',')]
Проблема: пустая строка после последней запятой (например, "a,b,") даст пустой элемент. Её можно отфильтровать: [x.strip() for x in input().split(',') if x.strip()]
Как вводить элементы списка построчно, пока не будет пустая строка?
Этот подход удобен, когда количество элементов заранее неизвестно:
lines = []
while True:
line = input()
if line == '':
break
lines.append(line)
print(lines)
Вариант с добавлением чисел:
nums = []
while True:
try:
val = input()
if val == '':
break
nums.append(int(val))
except ValueError:
print('Ошибка: введите целое число или пустую строку для завершения')
Как использовать eval() для ввода списка?
Можно попросить пользователя ввести код Python, например [1, 2, 3]:
lst = eval(input('Введите список: '))
print(lst)
Это опасно! eval() выполнит любой код, что угрожает безопасности. Используйте только в доверенной среде или для обучения.
Как ввести список чисел с плавающей точкой?
Замените int на float:
floats = list(map(float, input().split()))
print(floats)
Как ввести элементы списка с помощью цикла for с известным количеством?
Если количество элементов задано заранее:
n = int(input('Количество элементов: '))
arr = []
for i in range(n):
arr.append(int(input(f'Элемент {i+1}: ')))
print(arr)
Такой способ даёт полный контроль над каждым вводом, но менее удобен при большом количестве данных.
Расширенные примеры и нестандартные ситуации.
Дополнительные примеры
Ввод двумерного списка (матрицы)
Пользователь вводит количество строк и столбцов, затем построчно числа:
rows = int(input('Строк: '))
cols = int(input('Столбцов: '))
matrix = []
for i in range(rows):
row = list(map(int, input().split()))
# проверка, что длина строки равна cols (опционально)
matrix.append(row)
print(matrix)
Пример ввода и вывода:
Строк: 2 Столбцов: 3 1 2 3 4 5 6 [[1, 2, 3], [4, 5, 6]]
Ввод списка с автоматическим определением типа
Можно попробовать преобразовать каждую строку в int, иначе в float, иначе оставить строкой:
def smart_convert(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
return s
raw = input().split()
result = [smart_convert(x) for x in raw]
print(result)
Ввод: 42 3.14 hello [42, 3.14, 'hello']
Ввод списка через sys.stdin.read()
Когда данные передаются через перенаправление ввода или конвейер:
import sys
data = sys.stdin.read().strip().split()
nums = list(map(int, data))
print(nums)
Этот способ считывает все строки до конца файла (Ctrl+D / Ctrl+Z). Удобно для автоматической обработки.
Ввод с игнорированием лишних пробелов и пустых строк
Использование split() без аргументов уже игнорирует множественные пробелы. Но если нужно дополнительно отбросить пустые строки при построчном вводе:
lines = []
while True:
line = input().strip()
if not line:
break
lines.append(line)
print(lines)
Ввод списка с одновременным удалением дубликатов
Если порядок не важен, можно использовать set:
unique = list(set(input().split()))
print(unique)
Ввод: a b c a b a b c
Порядок не гарантируется. Для сохранения порядка - отсортировать или использовать OrderedDict.