Как вырастить список, чтобы он соответствовал заданной емкости в Python

Я новичок в Python. У меня есть ряд объектов, которые нужно вставлять по определенным индексам списка, но они выходят из строя, поэтому я не могу просто добавить их. Как я могу вырастить список, когда это необходимо, чтобы избежать IndexErrors?

def set(index, item): if len(nodes) <= index: # Grow list to index+1 nodes[index] = item 

Я знаю, что вы можете создать список с начальной пропускной способностью через nodes = (index+1) * [None] но каков обычный способ его создания? Следующие функции не кажутся эффективными:

 for _ in xrange(len(nodes), index+1): nodes.append(None) 

Кроме того, я полагаю, что в стандартной библиотеке есть класс, который я должен использовать вместо встроенных списков?

Это лучший способ сделать это.

 >>> lst.extend([None]*additional_size) 

Возможно, что-то вроде:

 lst += [None] * additional_size 

(вы не должны вызывать список переменных списка, так как это также имя конструктора списка).

похоже, я сначала не понял ваш вопрос. Если вы спрашиваете, как расширить длину списка, чтобы вы могли вставить что-то с индексом, большим, чем текущая длина списка , то lst.extend([None]*(new_size - len(lst)) , вероятно, будет Конечно, если вы заранее знаете, какой максимальный индекс вам понадобится, было бы целесообразно создать список заранее и заполнить его None .


Для справки я оставляю исходный текст: вставить что-то в середине существующего списка, обычный способ – не беспокоиться о том, чтобы развернуть список самостоятельно. Объекты списка имеют метод insert , который позволит вам вставить объект в любую точку списка. Поэтому вместо вашей функции set просто используйте

 lst.insert(item, index) 

или вы могли бы сделать

 lst[index:index] = item 

что делает то же самое. Python позаботится об изменении размера списка.

В стандартной библиотеке не обязательно использовать какой-либо класс, который вы должны использовать вместо list , особенно если вам нужна такая сортировка с произвольным доступом. Однако в модуле collections есть несколько классов, о которых вы должны знать, поскольку они могут быть полезны для других ситуаций (например, если вы всегда добавляете один конец списка, и заранее не знаете, сколько предметы, которые вам нужны, deque будет подходящим).