如何通过索引在Python中填充列表/数组?

35 投票
7 回答
94933 浏览
提问于 2025-04-15 11:37

这可能吗:

myList = []

myList[12] = 'a'
myList[22] = 'b'
myList[32] = 'c'
myList[42] = 'd'

当我尝试的时候,我得到了:

# IndexError: list assignment index out of range # 

7 个回答

19

这里有一个简单的列表包装器,它会自动在你试图给一个超出列表长度的索引赋值时,用零来扩展你的列表。

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)

现在你可以这样做:

>>> a = defaultlist([1,2,3])
>>> a[1] = 5
[1,5,3]
>>> a[5] = 10
[1,5,3,0,0,10]
29

对于“稀疏列表”,你可以使用一个 dict 来代替:

mylist = {}
mylist[12] = 'a'

等等。如果你想要一个真正的列表(记得用 [] 来初始化,而不是 ()!),你需要把那些没有设置的地方填上某个值,比如 None,这可以通过一个小辅助函数来实现,或者通过继承 list 来做到。

60

在你能给它添加内容之前,你需要先填入一些东西,比如 0 或者 None

myList = [None] * 100  # Create list of 100 'None's
myList[12] = 'a'  # etc.

另外,你也可以用字典来代替列表,就像 Alex Martelli 提出的那样

撰写回答