我尝试删除python列表中的异常值。但它只删除了第一个(190000),而没有删除第二个(20000)。有什么问题
import statistics
dataset = [25000, 30000, 52000, 28000, 150000, 190000, 200000]
def detect_outlier(data_1):
threshold = 1
mean_1 = statistics.mean(data_1)
std_1 = statistics.stdev(data_1)
#print(std_1)
for y in data_1:
z_score = (y - mean_1)/std_1
print(z_score)
if abs(z_score) > threshold:
dataset.remove(y)
return dataset
dataset = detect_outlier(dataset)
print(dataset)
输出:
[25000, 30000, 52000, 28000, 150000, 200000]
这是因为您试图在同一数据地址上进行操作。 dataset的地址等于data_1地址,当您从列表中删除一个元素时,它将根据Python的foreach结构传递下一个元素。在迭代过程中,不能对列表进行操作
很快,尝试这样调用该方法(它将数据集的元素作为新列表发送,而不发送数据集):
相关问题 更多 >
编程相关推荐