Формирование коллекций данных в Python

Раздел: Основы Python -> Работа со структурами данных

Основные способы создания списков и массивов в Python

Каким образом можно создать список, наиболее эффективно используя возможности Python?

Наиболее часто используемый и производительный способ создания списков - применение list comprehension (спискового включения). Он позволяет компактно сгенерировать список на основе итерации и условий, выполняясь быстрее циклов за счёт оптимизации интерпретатора.

# Создание списка квадратов чисел от 0 до 9
squares = [x**2 for x in range(10)]
print(squares)

добавить данные в список python (добавление данных в список в python)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Python добавить ключ (добавление ключа в словарь в python)

Пояснение: выражение [x**2 for x in range(10)] читается как для каждого x из range(10) вычислить x**2 и поместить результат в список. Такой подход заменяет конструкцию из for и append.

Типичная ошибка: попытка использовать сложные побочные эффекты внутри comprehension, например, изменение внешней переменной. Это снижает читаемость и может привести к неожиданному поведению.

Целесообразно применять list comprehension, когда требуется преобразовать или отфильтровать данные на лету.

Как создать пустой список?

Пустой список создаётся с помощью [] или list(). Первый способ быстрее и предпочтительнее.

empty1 = []
empty2 = list()
print(empty1, empty2)

Python добавить в множество (добавление элемента в множество в python)

[] []

создание множества python (создание множества (set) в python)

Ошибка: использование list как имени переменной (например, list = [1,2]) приведёт к переопределению встроенной функции.

Пустые списки нужны для динамического накопления данных.

Как создать список с повторяющимися элементами?

Умножение списка на целое число создаёт новый список с повторёнными элементами. Это удобно для инициализации фиксированным значением.

zeros = [0] * 10
print(zeros)
letters = ['a', 'b'] * 3
print(letters)

создание словаря в python (создание словаря в python)

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['a', 'b', 'a', 'b', 'a', 'b']

создание массивов python (создание списков/массивов в python)

Подводный камень: при умножении списка, содержащего изменяемые объекты (например, вложенные списки), создаются ссылки на один и тот же объект, а не копии.

matrix = [[0]] * 3
matrix[0][0] = 1
print(matrix)  # [[1], [1], [1]]
[[1], [1], [1]]

Используйте этот способ для простых, неизменяемых начальных значений.

Как создать список из диапазона чисел?

Функция range() генерирует последовательность, а list() преобразует её в список. Удобно для последовательных числовых значений.

numbers = list(range(5, 20, 3))
print(numbers)
[5, 8, 11, 14, 17]

При использовании только range в цикле list не требуется.

Ошибка: забыть обернуть range в list - переменная останется объектом range, что может вызвать путаницу.

Как создать массив с заданным типом данных?

Модуль array предоставляет массивы (array.array), хранящие элементы одного типа. Используется для экономии памяти.

from array import array
arr = array('i', [1, 2, 3])  # 'i' - signed integer
print(arr)
print(arr[0])
array('i', [1, 2, 3])
1

Типичная ошибка: попытка вставить элемент другого типа (например, строку) - возникнет TypeError.

Целесообразно при работе с большими однородными данными, где важна производительность памяти.

Как создать список из символов строки?

Строка является итерабельным объектом, поэтому list() разбивает её на отдельные символы.

chars = list('Python')
print(chars)
['P', 'y', 't', 'h', 'o', 'n']

Полезно для посимвольной обработки.

Проблема: при работе с Unicode-строками символы могут состоять из нескольких байтов, но list вернёт их как отдельные графемы.

Как создать список с помощью цикла и append?

Классический способ с методом append - наглядный, но менее производительный, чем comprehension.

result = []
for i in range(5):
    result.append(i * 10)
print(result)
[0, 10, 20, 30, 40]

Ошибка: забыть инициализировать список (использовать несуществующую переменную) - NameError.

Используйте этот подход, когда логика создания сложна и не укладывается в comprehension.

Как создать список с условием (фильтрация)?

List comprehension поддерживает фильтрацию с помощью if.

even = [x for x in range(20) if x % 2 == 0]
print(even)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Можно комбинировать с преобразованием.

Типичная ошибка: забыть условие после for - тогда фильтрация не произойдёт.

Как создать вложенный список (матрицу)?

List comprehension внутри другого comprehension создаёт многомерные структуры.

matrix = [[j for j in range(3)] for _ in range(4)]
print(matrix)
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]

Ошибка: случайное повторное использование одного и того же внутреннего списка (как в умножении списков) - возникает общая ссылка.

Используется для работы с табличными данными.

Расширенные примеры создания списков и массивов в Python

Создание списка с помощью генератора и list()

Генераторные выражения экономят память, а при передаче в list() превращаются в список.

Пример
gen = (x**2 for x in range(10))
squares_list = list(gen)
print(squares_list)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Создание списка с помощью map и filter

map и filter возвращают итераторы, которые можно преобразовать в список.

Пример
nums = range(10)
squared = list(map(lambda x: x**2, nums))
even = list(filter(lambda x: x % 2 == 0, nums))
print(squared)
print(even)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 2, 4, 6, 8]

Создание списка из нескольких итераторов с помощью zip

zip объединяет элементы из нескольких последовательностей в кортежи.

Пример
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
combined = list(zip(names, scores))
print(combined)
[('Alice', 85), ('Bob', 92), ('Charlie', 78)]

Создание списка с помощью распаковки (оператор *)

Оператор * позволяет распаковать итератор внутрь литерала списка.

Пример
a = [1, 2, 3]
b = [*a, 4, 5, *range(6, 9)]
print(b)
[1, 2, 3, 4, 5, 6, 7, 8]

Создание списка с помощью itertools.chain

Модуль itertools полезен для объединения нескольких итераторов.

Пример
import itertools
list1 = [1, 2]
list2 = [3, 4]
merged = list(itertools.chain(list1, list2, [5]))
print(merged)
[1, 2, 3, 4, 5]

Создание массива с типом 'd' (double) из модуля array

Пример
from array import array
double_arr = array('d', [1.5, 2.7, 3.14])
print(double_arr)
print(double_arr.itemsize)  # размер одного элемента в байтах
array('d', [1.5, 2.7, 3.14])
8

Создание списка из строк с разделением и дополнительной обработкой

Пример
text = "яблоко, банан, вишня"
items = [fruit.strip().upper() for fruit in text.split(',')]
print(items)
['ЯБЛОКО', 'БАНАН', 'ВИШНЯ']

Создание списка с помощью list comprehension с несколькими условиями

Пример
numbers = [x for x in range(100) if x % 2 == 0 if x % 5 == 0]
print(numbers)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

Создание списка из файла (построчное чтение)

Пример
# Файл data.txt содержит строки
with open('data.txt', 'r') as f:
    lines = [line.strip() for line in f]
print(lines)
['строка1', 'строка2', 'строка3']

При отсутствии файла возникнет ошибка FileNotFoundError.

Создание списка с помощью рекурсивного comprehension (не рекомендуется)

Наиболее редкий случай - вложенные comprehension для обработки вложенных структур.

Пример
nested = [[1, 2], [3, 4]]
flattened = [num for sublist in nested for num in sublist]
print(flattened)
[1, 2, 3, 4]

Создание списков/массивов в Python - comments

En
создание массивов python (python)