python - python - 如何根据包含第三个列表中的一些值的另一个列表填充python中的列表?
问题描述
蟒蛇人。我已经在许多论坛中搜索了我的问题,但没有足够好的答案。我有以下情况:想象一下,我有一个带有用户 ID的list1和带有用户名的list2。我还有list3和一些用户 ID(来自list1),我想用list2中的名称创建list4。我知道我可以使用 for 循环在 list3 中按 ID 搜索 ID 轻松找到他们的姓名,并从 list2 中查找用户的姓名,但我需要速度,因为我正在处理数百万行。这是我的代码片段:
for userID in list3:
index = [i for i, x in enumerate(list1) if x == userID]
list4.append(list2[index])
所以,我的问题是是否有更快的方法来解决这个问题?
谢谢!
解决方案
假设list1, ..., list4
有长度n1, ..., n4
。list3 中 id 的线性扫描复杂度为 O(n1*n3)。
另一种方法是从 list1 和 list2 创建一个查找字典。在这种情况下,复杂性将是字典创建 + 查找,即 O(n1) + O(n3)。
id2name = dict(zip(list1, list2))
list4 = [id2name[id] for id in list3]
在大多数情况下(除了非常短的 list3、0 或 1 长度)它会比线性扫描更快
推荐阅读
- ios - 安装后可以在 iOS 应用上安装模块吗?
- python - 在 Pandas MultiIndex DataFrame 上建立索引时出现 KeyError
- here-api - 如何在 Here Routing API 中获取“boatFerry”段的起点、终点和距离
- c# - 从基类获取对对象的引用。装饰器设计模式
- prometheus - Prometheus 自午夜以来的偏移量(秒)
- .net-core - 在 MySQL 上调用存储过程时,EF Core 上的转换错误(使用 Pomelo)
- php - PhpStorm 中的 Xdebug
- c# - 如何添加新数据并保留旧的现有数据
- postgresql - 如何将 postgresql 与 graphql 连接起来
- python - 如何使用openpyxl在正常模式下保存excel工作簿?