我得到了一个列表 l
我想做作业:
l[index] = val
但可能存在列表太小的情况。
所以,我想确保我有空间容纳新价值。 Sometimes I need to fill the new space with empty strings ''
, and sometimes with other objects (like empty lists []
, False
or None
)。
对于此任务,我使用以下过程:
def ResizeList(l, size, fill_with=None):
l += [fill_with]*(size-len(l))
(注意:即使 size-len(l)<=0
也能正常工作)(注意:因为我对 保留空间 感兴趣,所以我 故意不将其截断 为较短的列表)
像那样:
ResizeList(l, index+1)
l[index] = val
(当填充其他对象时,就像: ResizeList(l, index+1, [])
)
有更多的 pythonic 方法吗?是否有一些内置函数或库函数可以执行此操作?
我主要使用 Python-3.x,但了解 Python-2x 的知识很有用,也很受欢迎。
澄清:请不要告诉我 dict
,因为我需要 list
对于那些希望我更具体的人:
问题陈述表明它是关于 list
类型。使用 dict
这里不是一个选项或解决方案。这是有原因的,特别是与领域相关(我正在做一个必须显示一些渐近行为的实验原型, 而不是- 正如你可能习惯的那样 - 一个程序的原型。如果它是“只是一个程序的原型”,然后我同意使用字典和其他评论)。我有以下假设:
- 我有很多列表(需要关心内存和性能开销)
- 由于工作流程和原型的需要,我无法调用手写的 C/C++ 扩展
- 在计算过程中,最终的列表大小是未知的
- 我们知道在和列表中会很 密集
- 列表单元格以未知顺序写入和覆盖
这些只是我强调我需要 list
而不是 dict
的几个原因。对于那些对更多细节感兴趣或想讨论 dict
的人,请 在此处查看我们如何在评论中讨论
原文由 Grzegorz Wierzowiecki 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您确定列表——而不是
dict
是您用例的最佳数据结构,我建议使用以下类:此类检查分配给的索引是否超出列表的当前长度,并根据需要自动扩展列表。
该代码与 Python 2 和 3 兼容(已通过 2.6.5 和 3.1.2 测试)。
如果结构密集并且您需要尽快通过索引找到元素,则此类可能会很方便。如果结构稀疏,您可能应该考虑使用字典。