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
相关产品推荐
相关产品推荐

