python中“if-number-in-list”的优化

2024-04-26 12:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有一个大的(~106)float列表,我反复调用if number in list。列表不变。有没有什么方法可以加快这个过程,比如通过对列表进行排序,并利用它被排序的优势?在


Tags: 方法in利用number列表if排序过程
3条回答
  1. 将列表转换为一个集合,以便删除重复项并优化成员资格测试。在
  2. 确保机组只加载一次RAM
  3. 如果需要处理已排序的列表,请使用the array bisection algorithm(即,您不想消除重复项,需要进行插入等)。在

如果试图计算两个选项的时间复杂度,see this handy reference.

您应该将列表更改为set(如果set为常量,则为frozenset)。在

示例:

l = [1, 2, 3]
s = set(l)  # frozenset(l)
obj in l  # O(n) lookup
obj in s  # O(1) lookup

您可以将列表转换为一个集合,这可能需要大量的内存和计算时间来创建(这将删除重复项)。在

或者,您可以使用模块bisect来利用列表已排序的事实。第一个搜索时间为O(1),第二个搜索时间为O(log(n))。在

相关问题 更多 >