Создать список с переменной длиной в Python - PullRequest
0 голосов
/ 13 июня 2019
testList= []
testList[12]= 31
testList[23]= 1337

Error: IndexError: list assignment index out of range

В основном у меня есть уникальные целые числа, и я хочу использовать списки для хеш-функции h (x) = x (потому что они уникальны)

Я мог бы инициализировать длину следующим образом:

testList= [0 for i in range(50)]

Но тогда я должен исправить размер и свои уникальные числа, которые у меня увеличиваются со временем.Это нормально, чтобы установить размер, например, 1-2Mio или есть способ сделать это динамически?ArrayList <> в Java динамически предназначен для добавления и удаления, но так же, как и списки в Python.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 13 июня 2019

Возможно, вам нужен dict:

testList = {}
testList[12]= 31
testList[23]= 1337

print(testList)
print(testList[23])

Вывод:

{12: 31, 23: 1337}
1337
0 голосов
/ 14 июня 2019

Если вы не хотите использовать словарь (что, я думаю, вам следует), вы можете создать свой собственный автоматически расширяемый список:

class defaultlist(list):

    def __init__(self,defData):
        self.defData = defData

    def _getDefault(self):
        if isinstance(self.defData,type):
            return self.defData()
        return self.defData

    def __getitem__(self,index):
        if index >= len(self):
            return self._getDefault()
        return super.__getitem__(index)

    def __setitem__(self,index,value):
        while index>=len(self):
            self.append(self._getDefault())
        list.__setitem__(self,index,value)


testList = defaultlist(0) # need to provide a default value for auto-created items
testList[12]= 31
testList[23]= 1337

print(testList)
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1337]
...