在Python中按索引填充列表/数组?

Joa*_*nge 26 python list

这可能吗:

myList = []

myList[12] = 'a'
myList[22] = 'b'
myList[32] = 'c'
myList[42] = 'd'
Run Code Online (Sandbox Code Playgroud)

当我尝试时,我得到:

# IndexError: list assignment index out of range # 
Run Code Online (Sandbox Code Playgroud)

Ada*_*eld 50

在索引之前,您必须预先填充某些内容(例如0或者None):

myList = [None] * 100  # Create list of 100 'None's
myList[12] = 'a'  # etc.
Run Code Online (Sandbox Code Playgroud)

或者,使用dict而不是列表,正如Alex Martelli建议的那样.


Ale*_*lli 27

对于"稀疏列表",您可以使用dict:

mylist = {}
mylist[12] = 'a'
Run Code Online (Sandbox Code Playgroud)

等等.如果你想要一个实际的列表(初始化它[],不是 (),当然- !),你需要填写未设置插槽_some_thing,例如None,通过一个小的辅助功能或子类list.

  • 调用你的词典"mylist"可能不是最好的做法. (5认同)

Tri*_*ych 18

这是一个快速列表包装器,如果您尝试将值分配给超过其长度的索引,则会使用零自动扩展列表.

class defaultlist(list):

   def __setitem__(self, index, value):
      size = len(self)
      if index >= size:
         self.extend(0 for _ in range(size, index + 1))

      list.__setitem__(self, index, value)
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

>>> a = defaultlist([1,2,3])
>>> a[1] = 5
[1,5,3]
>>> a[5] = 10
[1,5,3,0,0,10]
Run Code Online (Sandbox Code Playgroud)