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

如何优化提取嵌套列表中以#开头字符串的Python代码以提升性能?

高效实现方案

直接使用单轮列表推导即可完成需求,代码如下:

import numpy as np

# 原始hash_list定义
hash_list = [['obi', 'is', '#alive'],['oge', 'is', 'beautiful'],
                ['Ade', 'the', '#comedian', 'de', '#rich'],['Jesus', 'wept']]

result = [
    [elem for elem in sublist if elem.startswith('#')] or np.nan
    for sublist in hash_list
]

print(result)

运行输出完全符合预期:[['#alive'], nan, ['#comedian', '#rich'], nan]

性能优势说明

  1. 时间复杂度严格线性:仅需要一次遍历所有元素,总时间复杂度为O(N)(N为所有子列表的元素总个数),不会出现指数级增长的问题。相比原实现少了一轮单独替换空列表的遍历步骤,进一步减少了开销。
  2. 底层优化效率更高:列表推导是Python底层C语言实现的循环逻辑,相比手动写的Python层级双层for循环,循环本身的开销低很多,数据量越大性能优势越明显,通常会比纯Python循环快5-10倍。
  3. 鲁棒性更强:使用str.startswith('#')判断前缀,替代直接取下标i[0]的写法,避免子列表中出现空字符串时抛出索引错误。
  4. 代码更简洁:利用Python逻辑或的短路特性,空列表会被判定为False,直接返回np.nan,不需要额外分支判断。

超大规模数据集优化方案

如果嵌套列表规模达到百万级以上,需要进一步降低内存占用,可以改用生成器实现,不会一次性加载所有结果到内存:

result_generator = ([elem for elem in sublist if elem.startswith('#')] or np.nan for sublist in hash_list)
# 遍历时才会逐个生成结果
for item in result_generator:
    print(item)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:05