首页 > 解决方案 > 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])

所以,我的问题是是否有更快的方法来解决这个问题?

谢谢!

标签: pythonlistperformancefor-loop

解决方案


假设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 长度)它会比线性扫描更快


推荐阅读