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

Python:按条件筛选元素时保留列表结构并追踪来源

保留原列表结构的NumPy数组筛选实现

首先是原列表l6的创建代码:

import numpy as np

l1 = np.ones(10)
l2 = 10*np.ones(9)
l3 = 9*np.ones(9)
l4 = 2*np.ones(1034)
l5 = np.array([1, 2, 8, 1350, 1, 14, 13, 1467416, 1413, 135, 1, 3 , 9, 8, 9, 10])

l6 = [l1, l2, l3, l4, l5]

原代码会将所有符合条件的元素收集到扁平列表,现在需要保留与l6一致的5元素列表结构:

  • 索引0、2、3的位置用空列表或0填充
  • 索引1、4的位置存入对应子数组中值大于9的元素,同时明确元素来源

实现方案

通过遍历l6的每个元素,结合索引判断处理,以下是两种常用方案:

方案1:空列表填充无效位置,元组标注来源

result = []
for idx, arr in enumerate(l6):
    # 用NumPy布尔索引快速筛选符合条件的元素
    filtered = arr[arr > 9].tolist()
    if filtered:
        # 用元组绑定来源标识和筛选结果
        result.append((f"来源:l6[{idx}]", filtered))
    else:
        # 无符合条件元素时填充空列表
        result.append([])

执行后result的结构:

  • result[0]:空列表(l1全为1,不满足条件)
  • result[1]:('来源:l6[1]', [10.0, 10.0, ...])(共9个10.0)
  • result[2]:空列表(l3全为9,不满足条件)
  • result[3]:空列表(l4全为2,不满足条件)
  • result[4]:('来源:l6[4]', [1350, 14, 13, 1467416, 1413, 135, 10])

方案2:0填充无效位置,字典存储有效结果

如果需要用0替代空列表,可改用字典存储有效数据,来源标识更清晰:

result = []
for idx, arr in enumerate(l6):
    filtered = arr[arr > 9].tolist()
    if filtered:
        result.append({
            "来源位置": f"l6[{idx}]",
            "符合条件元素": filtered
        })
    else:
        result.append(0)

关键细节

  • 利用NumPy布尔索引arr[arr > 9]比嵌套for循环筛选效率更高
  • 通过enumerate获取子数组的索引,直接关联元素来源
  • 两种填充方式都严格保留了原列表的5元素结构,完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:35:32