Формирование коллекций данных в 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]