如何判断列表元素是否处于对应子列表的数值区间?
解决方案
首先定义原始数据:
listA = [0.04870086, 0.57480212, 0.89015539, 2.3233615, 4.55812396, 7.13551459, -1.08155996, 2.17696328, -2.63679501, -2.33568303, 1.44485836, 2.57565872, 1.49871307, 0.26896593, 4.91618077] listB = [[-0.006242951417219811, 0.2695363035421434], [0.18216832098326075, 1.2135053544677805], [-5.7767682655295856, 8.644974491878234], [-2.6175178748619965, 11.350843901384977], [-3.5832555764006813, 19.889930736681176], [-18.98605217513358, -0.44537447407901887], [-4.66448539414492, 10.687900677104983], [-8.502439858318859, 3.8546296063721726], [-17.319599857758103, 18.476221095928576], [-5.287099091734136, 7.830321030743221], [-11.37116751629717, 24.648615759994385], [-8.133549393916292, 5.702535573546525], [-10.412791226300737, 13.0758676055572], [-3.5332459196432042, 13.790340644751073], [1.1737906639770186, 9.66211063676472]]
使用循环实现区间判断的代码:
result = [] for a, interval in zip(listA, listB): # 统一区间上下限,避免子列表数值顺序颠倒 lower = min(interval) upper = max(interval) # 判断元素是否在区间内(包含边界) result.append(lower <= a <= upper) print(result)
运行结果
[True, True, True, True, True, False, True, True, True, True, True, True, True, True, True]
说明
- 用
zip同步遍历两个列表的对应位置元素,保证每一组判断的位置匹配 - 先计算区间的最小和最大值,解决listB中部分子列表大值在前的情况(比如第6个区间
[-18.986..., -0.445...]) - 最终结果是布尔值列表,每个元素对应listA中元素是否处于listB对应区间内
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

