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

Python中如何高效将二维列表内指定词汇替换为<UNK>?

性能问题核心原因

  • 原方案使用列表做成员查询:列表的in操作时间复杂度为O(n),5.5万长度的td每次查询要遍历最多5.5万次,是性能差的核心原因
  • 第二套numpy方案采用三层嵌套循环,时间复杂度达到O(td长度 * 总词数),运算量超过10^10次,必然极慢
  • 第一套列表推导式写法错误,直接把二维嵌套列表压成了一维列表,不符合数据结构要求

最优纯Python实现方案

第一步:将td转换为集合(核心优化)

集合的成员查询时间复杂度为O(1),直接把查询性能提升几个数量级:

td_set = set(td)

第二步:用正确的嵌套列表推导式处理数据

保持原二维列表结构,遍历每个句子的每个词汇即可,无需下标遍历:

train_dataset = [
    ['<UNK>' if word in td_set else word for word in sentence]
    for sentence in train_dataset
]

更高性能可选方案(字典映射)

如果需要进一步压缩耗时,可以用预构建的替换字典,查询速度比集合略快:

# 构建替换映射表
replace_map = {word: '<UNK>' for word in td}
# 批量替换
train_dataset = [
    [replace_map.get(word, word) for word in sentence]
    for sentence in train_dataset
]

性能参考

15万条句子、总词汇量约200万的场景下,上述方案在普通CPU环境下耗时仅0.5~2秒,远快于原方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:54:03