如何通过索引在Python中填充列表/数组?
这可能吗:
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 提出的那样。