Создание списка с помощью ввода данных

Раздел: Структуры данных -> Ввод коллекций

Ввод списка в 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.

Ввод списка в Python - comments

En
Input списка python (python)