Python

Как заменить элемент в списке Python

Элемент списка заменяют по индексу, по найденному значению, по условию или внутри словаря. Самое важное — проверить, что нужный индекс или элемент действительно существует

По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы

По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы

Замена по индексу

statuses = ["draft", "review", "ready"]

statuses[0] = "new"

print(statuses)

Индекс должен существовать, иначе будет IndexError

Безопасная проверка индекса

items = ["a", "b"]
index = 2

if 0 <= index < len(items):
    items[index] = "x"
else:
    print("Такого индекса нет")

Замена первого совпадения

items = ["draft", "ready", "draft"]

if "draft" in items:
    index = items.index("draft")
    items[index] = "new"

print(items)

Замена всех совпадений

items = ["draft", "ready", "draft"]

items = ["new" if item == "draft" else item for item in items]

print(items)

Замена в списке словарей

tasks = [
    {"title": "Код", "status": "draft"},
    {"title": "Тест", "status": "ready"},
]

for task in tasks:
    if task["title"] == "Код":
        task["status"] = "review"

print(tasks)

Как проверять себя

Проверьте обычный список, пустой список, список из одного элемента и данные с повтором. Если в задаче есть индекс, отдельно проверьте слишком короткий список. Если есть изменение на месте, выведите исходные данные до и после операции

Как выбрать способ замены

Задача Подход
известен индекс items[index] = value
нужно заменить первое совпадение index = items.index(old) и присваивание
нужно заменить все совпадения comprehension с условием
нужно изменить поле в словаре цикл по списку словарей
исходный список нужен дальше создать новый список
исходный список можно менять заменить на месте

Сначала решите, что именно известно: позиция, старое значение, условие или поле внутри словаря. От этого зависит код. Если начать сразу с items[0] = ..., легко заменить не тот элемент

Частые ошибки

Путать номер элемента и индекс

Первый элемент имеет индекс 0, второй — индекс 1, третий — индекс 2

Менять список там, где нужен новый результат

Если исходные данные еще пригодятся, используйте новый список или sorted(), а не изменение на месте

Не проверять пустые данные

Пустой список часто ломает pop, choice, обращение по индексу и вычисление среднего значения

Замена по условию в списке словарей

tasks = [
    {"title": "код", "status": "draft"},
    {"title": "тест", "status": "todo"},
]

for task in tasks:
    if task["title"] == "код":
        task["status"] = "review"

print(tasks)

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

Когда лучше создать новый список

Если исходные данные должны остаться нетронутыми, создайте новый список через comprehension. Так легче сравнить до и после, особенно в учебных задачах

Замена всех элементов по правилу

statuses = ["draft", "ready", "draft", "done"]

new_statuses = [
    "review" if status == "draft" else status
    for status in statuses
]

print(new_statuses)

Такой вариант не меняет исходный список и хорошо подходит для преобразований. Если нужно изменить список на месте, используйте цикл с индексами через range(len(items)), но делайте это только когда исходный объект действительно должен поменяться

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x