Массивы (списки) языка Python: углубленное объяснение

Раздел: Основы 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])  # cherry

Python 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]

Массивы (списки) в Python - comments

En
язык программирования python массивы (python)