You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars:检查列表类型列元素是否存在于输入列表的最优方法

更优方法:使用Polars的list.contains_any函数

你的现有实现通过求交集再判断长度的方式是可行的,但Polars提供了更直接高效的list.contains_any方法,专门用于检查列表列是否包含目标列表中的任意元素,既能简化代码,又能提升性能(无需生成完整交集,找到匹配项即停止判断)。

实现代码

import polars as pl

df = pl.DataFrame(
    {"sets": [[1, 2, 3], [1, 2], [9, 10]]}
)

# 直接用contains_any判断列表是否包含目标元素中的任意一个
result = df.with_columns(
    pl.col("sets").list.contains_any([1,7]).alias("check")
)

print(result)

输出结果

shape: (3, 2)
┌───────────┬───────┐
│ sets      ┆ check │
│ ---       ┆ ---   │
│ list[i64] ┆ bool  │
╞═══════════╪═══════╡
│ [1, 2, 3] ┆ true  │
│ [1, 2]    ┆ true  │
│ [9, 10]   ┆ false │
└───────────┴───────┘

旧版本Polars兼容方案

如果你的Polars版本较旧(<0.18.0)不支持contains_any,可以用list.eval结合list.any实现相同逻辑:

result = df.with_columns(
    pl.col("sets").list.eval(pl.element().is_in([1,7])).list.any().alias("check")
)

为什么更优

  • 性能更高效:contains_any是Polars原生优化的方法,无需生成完整的交集集合,只要找到第一个匹配元素就会终止判断,减少了计算开销
  • 代码更直观:直接表达“列表是否包含目标列表中任意元素”的业务逻辑,可读性更强,维护成本更低

内容的提问来源于stack exchange,提问作者yz_jc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:52:56