这可能是一个愚蠢的问题,但想象一下以下情况:您正在填写一个列表列表,一旦完全填充,就会转换为DataFrame
。您事先并不知道最终尺寸,因此无法以正确的尺寸进行预分配。
在填充行(即嵌套列表)时,如果您尝试将列表索引超出它的长度,它将给出IndexError
,这不是不合理的:
>>> row = list()
>>> row.append('a')
>>> row[3] = 'c'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
但是,如果您使用insert(index, element)
方法,我原本预计会在列表中出现空白(至少可以选择有间隙)。毕竟,如果我只想添加到最后,我会使用append(element)
代替。
>>> row = list()
>>> row.append('a')
>>> row.insert(3,'c')
>>> row
['a', 'c']
正如我们上面所看到的,情况并非如此。为什么会这样?
编写一个自定义包装函数,迭代列表,唯一可能的方法来获得一个有缺口的列表,例如: ['a', None, 'c']
(或其他一些默认值)?
答案 0 :(得分:2)
不,Python列表不支持差距;他们并不稀疏。 “插入”超过结尾与添加相同。
请注意,None
与其他语言中的空指针不同,它只是一个单独的对象,其他语言经常使用空指针;否则它仍然只是另一个对象。
如果您需要稀疏数据结构,最简单的方法是使用字典:
row = {}
row[3] = 'c'
答案 1 :(得分:1)
可能不直接通过list
中的函数。如何将其存储在dict
中,然后在完全填充后创建列表?
d = {index: item for index, item in yourData}
result = [None]*max(d.keys())
for index, item in d.items():
result[index] = item
#result is now a list with None filled at indices that do not have data..