繁体   English   中英

检查一个列表中的任何值是否存在于另一个列表中(最快的解决方案)

[英]Check if any value in one list is present in another list (fastest solution)

我有一个包含 100 万行和 10 列的DataFrame 每列是一个元素列表(它可能是一个空列表或最多包含 5 个元素的列表)。 假设我有另一个具有 100000 个元素的 lsit ,我只想过滤DataFrame中给定列(例如columnA )包含我的 100000 个元素的大列表中的任何元素的那些行。 这是我当前的代码:

df = df[df["columnA"].apply(lambda x: any(value in valuesList for value in x))]

但是计算它需要大量的时间。 如何加快代码速度?

你的算法的复杂度是 O(n^3)。 第一个 n 用于遍历所有行。 第二个 n 用于遍历单元格中的所有值。 第三个 n 用于遍历您比较单元格值的列表项(通过检查列表是否包含特定值来完成)。 正如@Marat 建议的那样:使用一套。 检查一个集合是否包含特定值是常数时间 O(1)。 这将复杂度降低到 O(n^2)。

s = set(valuesList)
df = df[df["columnA"].apply(lambda x: any(value in s for value in x))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM