Сообщить об ошибке.

Замена элемента в списке по его индексу

Синтаксис:

sequence[i] = x

Параметры:

  • sequence - изменяемая последовательность, list или bytearray,
  • x - произвольный объект, удовлетворяющий любым ограничениям типа и значения, наложенным sequence.
  • i - целое число, индекс элемента

Результат:

  • новое значение элемента

Описание:

Операция sequence[i] = x позволяет заменить значение элемента последовательности по его индексу новым значением.

В результате элемент с индексом i из последовательности sequence получит новое значение (заменится) на объект x.

Если индекс i отрицателен, то индекс будет считаться относительно конца последовательности sequence. В этом случае положительный индекс можно посчитать по формуле len(sequence) - i.

Обратите внимание, что -0 по-прежнему будет 0.

При попытке заменить значение элемента с индексом, превышающим длину последовательности len(sequence) поднимается исключение IndexError.

Эта операция поддерживаются изменяемыми типами последовательностей.

Примеры изменения элемента списка по индексу.

>>> x = [2, 5, 8, 11, 14, 17]
>>> x[1] = 150
>>> x
# [2, 150, 8, 11, 14, 17]
>>> x[-1] = 100
>>> x
# [2, 150, 8, 11, 14, 100]

x = ['el_1', 'el_2', 'el_3']
>>> x[2] = 'lorem'
>>> x
# ['el_1', 'el_2', 'lorem']

# замена элемента неизменяемой 
# последовательности невозможна
>>> x[3] = 'foo'
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# IndexError: list assignment index out of range

Замена элементов в списке по условию.

Например, имеем числовой список, в котором присутствуют как целые, так и вещественные числа. Необходимо получить тот же список, в котором вещественные числа округлены до целых.

В данном случае можно поступить 2-мя способами: первый - это создать новый пустой список и в цикле for/in добавлять в него значения, округляя все элементы до целого, из первого списка. Недостаток такого способа: если список огромный то столкнемся с не экономным расходом памяти.

Второй подход - это при каждой итерации по списку, проверять тип числа и если это вещественное число то округлять его до целого и на лету изменять значение в списке по его индексу. Недостаток: скорость обработки списка незначительно уменьшиться.

И так, смотрим:

# имеем числовой список
lst = [1, 5.5, 3, 8.2, 11.1, 10, 4, 5.6, 9]
# используем функцию `enumerate()`
# для определения индекса элемента
# при каждой итерации
for n, i in enumerate(lst, 0):
    # проверяем тип числа
    if type(i) == float:
        # если float, то округляем
        i = round(i)
        # изменяем элемент по индексу
        lst[n] = i

>>> lst
# [1, 6, 3, 8, 11, 10, 4, 6, 9]

Замена элементов вложенных списков.

>>> x = [[2, 150], [11, 14, 17]]
>>> x[0] = [0, 0] 
>>> x
# [[0, 0], [11, 14, 17]]

>>> x[1][1] = 1000
>>> x
# [[0, 0], [11, 1000, 17]]

>>> x[0][1] = 'foo'
>>> x
# [[0, 'foo'], [11, 1000, 17]]

>>> x[1] = 'replace'
>>> x
# [[0, 'foo'], 'replace']