【发布时间】:2021-09-01 16:52:31
【问题描述】:
我正在编写一个函数,它接受大量字符串并将它们分类。
每个分类的字符串一个接一个地从列表中删除。
函数有时需要删除任意索引中的字符串,有时需要从最左边的位置删除字符串。
这两种情况之间的比率大约是它从最左边位置删除的时间的 2/3 和从中间任意位置删除的时间的 1/3。
我知道使用列表作为数据结构来保存字符串是 O(n) 删除最左边的单元格并 O(n-i) 删除第 i 个单元格,因为每次删除都会将所有单元格向右移动一步。
然后我尝试使用collections.deque 代替列表,但实际上它比原始list 数据结构花费了更多时间(大约多4/3 时间),可能是因为任意位置删除。
在这些假设下哪种数据结构的性能最好?有什么比只使用list 更好的方法吗?
从最左边的单元格中删除list 数据结构使用list.pop(0),从任意索引中删除使用list.remove(value) 按值。
【问题讨论】:
-
向我们展示你是如何使用双端队列的
-
列表有多大,如何找到那些任意索引?
-
只用
leftpop()从左边删除,remove(index)在任意索引中删除 -
也许反转你的列表(并相应地调整算法)所以你从右边删除?
-
或者也许做惰性删除,即,不是在任意索引处删除,而是将值替换为
None,并在以后遇到它时将其删除(当它是最后一个列表元素时)。如果您告诉我们更多有关您的整体程序的信息,我们可以为您提供更好的帮助。
标签: python performance