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

Python如何去除列表/二维数组异常值 列表与int比较TypeError解决

报错原因

你触发TypeError的核心原因是在判断条件里误用了列表对象y2和整数做大小比较:你写的for i in y2会把列表里的每个元素依次赋值给变量i,但你判断的时候用了整个列表y2和40、60做比较,Python不支持列表和整数的大小比较,因此报错。


修复与功能实现

1. 一维列表异常值剔除(固定区间40~60为正常值)

方法1:基础循环实现

import random
y2 = []
for _ in range(100):
    y2.append(round(random.uniform(1,100),1))

# 筛选保留40~60的正常值,剔除范围外的异常值
filtered_y2 = []
for i in y2:
    if 40 <= i <= 60:
        filtered_y2.append(i)
print(filtered_y2)

方法2:列表推导式(更简洁)

filtered_y2 = [i for i in y2 if 40 <= i <= 60]
print(filtered_y2)

2. 二维数组异常值剔除扩展

如果是二维列表,要保持结构剔除异常值可以用嵌套列表推导式:

# 示例:生成3行5列的二维随机数组
y_2d = [[round(random.uniform(1,100),1) for _ in range(5)] for _ in range(3)]

# 逐行筛选,保留每行中40~60的正常值
filtered_2d = [[i for i in row if 40 <= i <= 60] for row in y_2d]
# 可选:剔除筛选后为空的行
filtered_2d = [row for row in filtered_2d if row]
print(filtered_2d)

3. 统计学异常值剔除(可选)

如果你的异常值不是固定区间,而是需要用统计规则筛选,比如四分位距(IQR)法,可以参考实现:

import numpy as np
y_arr = np.array(y2)
q1 = np.percentile(y_arr, 25)
q3 = np.percentile(y_arr, 75)
iqr = q3 - q1
# 异常值判定规则:小于Q1-1.5*IQR 或 大于Q3+1.5*IQR
normal_mask = (y_arr >= q1 - 1.5*iqr) & (y_arr <= q3 + 1.5*iqr)
filtered_y2 = y_arr[normal_mask].tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:06:08