当前位置: 首页 > 面试题库 >

用唯一索引为列表建立索引

常睿范
2023-03-14
问题内容

我有一个清单说l = [10,10,20,15,10,20]。我想为每个唯一值分配一个特定的“索引”来获取[1,1,2,3,1,2]

这是我的代码:

a = list(set(l))
res = [a.index(x) for x in l]

事实证明这很慢。

l具有1M个元素和100K个唯一元素。我也尝试过用lambda和sort进行地图操作,这没有帮助。这样做的理想方法是什么?


问题答案:

由于a.index(x)执行线性搜索,然后对中的每个元素执行线性搜索,因此导致代码变慢l。因此,对于每1M个项目,您要进行(最多)100K个比较。

将一个值转换为另一个值的最快方法是在地图中查找它。您需要创建地图,并填写原始值和所需值之间的关系。然后在列表中遇到另一个相同值时,从地图中检索该值。

这是一个通过的示例l。可能还有进一步优化的空间,以消除res在附加到它时重复进行重新分配的需要。

res = []
conversion = {}
i = 0
for x in l:
    if x not in conversion:
        value = conversion[x] = i
        i += 1
    else:
        value = conversion[x]
    res.append(value)


 类似资料:
  • CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引

  • 问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只

  • 我有一个数据集DF,其中包括USER和DATETIME两列(列索引不在我的数据中。它是输出应该是什么样子)。DF中的行显示了每一分钟的活动。我想要的是创建并填充一个名为“index”的列。这个索引是显示等于或小于4分钟的活动。换句话说,如果第i行的DATETIME与其后面的第i 1行之间的差异小于或等于4分钟,则它们在同一个索引中(即在同一个活动中)。但是,如果这个差异大于4分钟,下一行(i 1)

  • 我创建下表: 我的问题是我是否需要这句话: ? 是否自动对创建索引?

  • 本文向大家介绍唯一索引比普通索引快吗, 为什么?相关面试题,主要包含被问及唯一索引比普通索引快吗, 为什么?时的应答技巧和注意事项,需要的朋友参考一下 唯一索引不一定比普通索引快, 还可能慢. 查询时, 在未使用limit 1的情况下, 在匹配到一条数据后, 唯一索引即返回, 普通索引会继续匹配下一条数据, 发现不匹配后返回. 如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微. 更新时,