Добавить элемент в список по индексу, который находится за пределами диапазона в Python 3 - PullRequest
0 голосов
/ 02 февраля 2019

В других языках, таких как javascript, когда вы добавляете значение в массив, находящийся за пределами диапазона индексов, вы «расширяете» массив неопределенными значениями до указанного индекса.

Пример:

var arr = [1,2,3]
arr[4] = 4
console.log(arr) // [1,2,3,undefined,4]

Когда я пытаюсь сделать это в Python, я получаю индекс назначения списка из-за ошибки диапазона.

Есть ли способ сделать то же самое в Python?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Вы можете создать подкласс list и переопределить метод __setitem__, чтобы он расширял список в соответствии с заданным индексом, который также может быть объектом slice, в этом случае больший из startи stop атрибуты среза должны использоваться:

class List(list):
    def __setitem__(self, index, value):
        self.extend([None] * ((max(index.start, index.stop - 1) if isinstance(index, slice) else index) - len(self) + 1))
        super().__setitem__(index, value)

так, чтобы:

arr = List((1, 2, 3))
arr[5] = 5
print(arr)
arr[7:9] = [4, 5]
print(arr)

вывод:

[1, 2, 3, None, None, 5]
[1, 2, 3, None, None, 5, None, 4, 5]

Обратите внимание, что ожидаемый результат вВаш вопрос неверен, потому что индекс 5 фактически относится к 6-му, а не 5-му пункту списка.

0 голосов
/ 02 февраля 2019

Вы имеете в виду что-то вроде

my_list = [1, 2, 3, 4]
my_list.append(None)
my_list.append(5)

Результат: [1, 2, 3, 4, Нет, 5]

???Возможно, я неправильно понимаю проблему, но

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...