Массивы (списки) языка Python: углубленное объяснение
Списки: создание, доступ и основные методы
Список (list) в Python - это упорядоченная изменяемая коллекция элементов произвольных типов. Основное преимущество списков перед массивами из других языков - возможность хранить данные разных типов и динамически менять размер.
# Создание списка
fruits = ['apple', 'banana', 'cherry']
numbers = [1, 2, 3, 4, 5]
mixed = [1, 'two', 3.0, [4, 5]] # вложенный списокзначения списка числа python (итерация по значениям списка чисел в python)
# Вывод: ['apple', 'banana', 'cherry']
словарь set python (словарь и set в python)
Доступ к элементам осуществляется по индексу, начиная с 0. Отрицательные индексы отсчитывают с конца.
print(fruits[0]) # apple
print(fruits[-1]) # cherryPython dict set (словарь и множество в python)
apple cherry
типы структур python (типы структур данных в python)
Срезы (slicing) позволяют получить подсписок:
print(fruits[1:3]) # ['banana', 'cherry']
print(fruits[:2]) # ['apple', 'banana']
print(fruits[::2]) # ['apple', 'cherry']кортеж чисел python (кортеж чисел в python)
['banana', 'cherry'] ['apple', 'banana'] ['apple', 'cherry']
язык программирования python массивы (массивы (списки) в python)
Основные методы для добавления, удаления и поиска:
fruits.append('orange') # добавить в конец
fruits.insert(1, 'blueberry') # вставить по индексу
fruits.remove('banana') # удалить первое вхождение
popped = fruits.pop() # удалить и вернуть последний
index = fruits.index('apple') # найти индекс первого вхождения
fruits.sort() # сортировка на месте
fruits.reverse() # обратный порядокмассивы данных python 3 (массивы данных в python)
# После операций список может выглядеть так: ['apple', 'blueberry', 'cherry', 'orange']
одномерные массивы на языке программирования python (одномерные массивы в python)
Возможные ошибки:
- IndexError: обращение к несуществующему индексу. Проверяйте длину списка len().
- ValueError: удаление или поиск несуществующего элемента, например, fruits.remove('kiwi').
- AttributeError: случайное использование методов строк, например, fruits.upper().
Как создать список чисел от 0 до 9?
# Вариант 1: функция list() и range()
nums = list(range(10))
print(nums)последовательности в python и способы их реализации (последовательности в python и способы их реализации)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
программы с массивами на python (программы с массивами на python)
# Вариант 2: генератор списка (list comprehension)
nums = [x for x in range(10)]
print(nums)Python пар (пары (ключ-значение) в python)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python разница списков (разница между списками и кортежами в python)
Ошибка: попытка использовать range() как список напрямую, например, print(range(10)) выведет объект range, а не список. Применяйте list() или генератор.
Как отфильтровать четные числа из списка?
# С помощью list comprehension
numbers = [1, 2, 3, 4, 5, 6]
evens = [n for n in numbers if n % 2 == 0]
print(evens)как сделать массив python (создание массива (списка) в python)
[2, 4, 6]
списки в языке python (списки в python)
# Функциональный подход с filter()
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)Python массив int (массив целых чисел в python)
[2, 4, 6]
Python набор значений (множество (set) значений в python)
Не забывайте преобразовывать filter() в список, иначе получите объект-итератор. Также лямбда-функция требует аккуратного синтаксиса.
Как преобразовать строку в список символов?
text = 'Hello'
chars = list(text)
print(chars)
['H', 'e', 'l', 'l', 'o']
Или разбить по разделителю:
sentence = 'Python is great'
words = sentence.split()
print(words)
['Python', 'is', 'great']
Проблема: split() без аргументов разбивает по любым пробельным символам. Если нужен строгий разделитель, передавайте его: split(',').
Как объединить несколько списков?
a = [1, 2]
b = [3, 4]
c = a + b # оператор + создаёт новый список
print(c)
a.extend(b) # изменяет исходный список a, добавляя элементы b
print(a)
[1, 2, 3, 4] [1, 2, 3, 4]
Ошибка: использование append() вместо extend: a.append(b) добавит список b как один элемент, а не его содержимое. Результат: [1, 2, [3, 4]].
Общие проблемы и их решения:
- Изменение списка во время итерации: при удалении элементов в цикле for индексы смещаются. Решение: итерировать по копии списка (list[:]) или создать новый список через генератор.
- Поверхностное копирование: при присваивании list2 = list1 обе переменные ссылаются на один объект. Изменение одного отразится на другом. Для настоящей копии используйте list1[:] или list1.copy() или copy.deepcopy() для вложенных структур.
- Мутабельность вложенных объектов: если список содержит изменяемые объекты (например, другие списки), их модификация через ссылку может быть неожиданной. Применяйте deepcopy() при необходимости полной независимости.
Продвинутые примеры работы со списками
1. List comprehension с условием и преобразованием
# Создание списка квадратов чётных чисел от 0 до 9
squares_even = [x**2 for x in range(10) if x % 2 == 0]
print(squares_even)
[0, 4, 16, 36, 64]
2. Вложенные списки (матрицы) и их обход
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Получение столбца (второго) через list comprehension
column_1 = [row[1] for row in matrix]
print(column_1)
[2, 5, 8]
3. Использование enumerate для получения индекса
fruits = ['apple', 'banana', 'cherry']
for idx, fruit in enumerate(fruits, start=1):
print(f'{idx}: {fruit}')
1: apple 2: banana 3: cherry
4. Параллельная итерация с zip
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f'{name}: {score}')
Alice: 85 Bob: 92 Charlie: 78
5. Сортировка с кастомным ключом
words = ['apple', 'Banana', 'cherry', 'Date']
# Сортировка без учёта регистра (ключ str.lower)
sorted_words = sorted(words, key=str.lower)
print(sorted_words)
['apple', 'Banana', 'cherry', 'Date']
6. Применение map и lambda для преобразования
numbers = [1, 2, 3, 4]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)
[2, 4, 6, 8]
7. Использование reduce (из functools) для агрегации
from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda a, b: a * b, numbers)
print(product)
24
8. Распаковка списка (деструктуризация)
first, second, *rest = [1, 2, 3, 4, 5]
print(first, second, rest)
1 2 [3, 4, 5]
9. Срезы с изменением подсписка
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
nums[2:5] = [20, 30, 40] # замена среза
print(nums)
[0, 1, 20, 30, 40, 5, 6, 7, 8, 9]
10. Удаление всех элементов по условию
values = [1, 2, 2, 3, 4, 2]
# Удалим все двойки, создав новый список
filtered = [v for v in values if v != 2]
print(filtered)
[1, 3, 4]