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

Python嵌套列表按值范围筛选、记录索引及按索引取值方法

问题原因

你之前写的list_B = [i[a:b] for i in list_A]用的是列表切片逻辑,作用是截取每个子列表索引从a到b-1的元素,完全不是按元素值做区间筛选,所以得不到预期结果。

正确实现

首先定义基础数据和筛选阈值:

list_A = [[0.4,0.9,1,4,8],[9,2,3,7,8],[1,1.5,5,7,8],[5,6,10,2,3]]
list_D = [[100,200,50,60,50],[5,20,30,45,50],[90,10,30,40,60],[30,40,50,20,10]]
a = 1
b = 4

分步实现(可读性更好)

遍历每个子列表时同步收集符合区间要求的元素值、对应索引,不需要重复遍历两次:

list_B = []
list_C = []
for sub_list in list_A:
    valid_vals = []
    valid_idxs = []
    for idx, val in enumerate(sub_list):
        # 闭区间判断,包含两端端点
        if a <= val <= b:
            valid_vals.append(val)
            valid_idxs.append(idx)
    list_B.append(valid_vals)
    list_C.append(valid_idxs)

# 按list_C记录的索引从list_D取值生成list_E
list_E = []
for sub_d, idxs in zip(list_D, list_C):
    list_E.append([sub_d[i] for i in idxs])

简洁列表推导写法

如果偏好更短的代码,可以直接用嵌套列表推导实现:

list_B = [[val for val in sub if a <= val <= b] for sub in list_A]
list_C = [[idx for idx, val in enumerate(sub) if a <= val <= b] for sub in list_A]
list_E = [[sub_d[i] for i in idxs] for sub_d, idxs in zip(list_D, list_C)]
运行结果说明

运行后输出结果如下:

  • list_B = [[1, 4], [2, 3], [1, 1.5], [2, 3]],完全符合需求给出的预期结构
  • list_C = [[2, 3], [1, 2], [0, 1], [3, 4]]:你给出的示例里list_C第一个子列表[0,1]属于笔误,索引0、1对应的元素是0.4、0.9,不在[1,4]闭区间内,不符合筛选规则
  • list_E = [[50, 60], [20, 30], [90, 10], [20, 10]]:除第一个子列表因索引笔误导致取值偏差外,其余三个子列表的结果和你给出的预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:45:39