如果项目位于距离中位数的四分位数范围之外,我试图从列表中删除该项目。
以下是清单:
l = [69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 87, 89]
IQR,中位数以及中位数以上和以下与import numpy as np
iqr = np.subtract(*np.percentile(l, [75, 25]))
median = np.percentile(l, 50)
minus = median - iqr
plus = median + iqr
负数为69,加号为71(使用IQR高于和低于中位数)
但是,当遍历列表并尝试删除iqr上方/下方的项目(87,89)时。它们不会从列表中删除。
for i in l:
if i < minus:
del i
if i > plus:
del i
当我打印列表时,它仍然显示87,89。
答案 0 :(得分:1)
for ele in l[:]:
if ele < minus or ele > plus:
l.remove(ele)
您必须复制l l[:]
并使用l.remove
答案 1 :(得分:1)
del
不是您正在寻找的运营商。它用于删除对象的引用,因此在垃圾收集中很有用。
你可能正在寻找这个:
import numpy as np
l = [69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 87, 89]
iqr = np.subtract(*np.percentile(l, [75, 25]))
median = np.percentile(l, 50)
minus = median - iqr
plus = median + iqr
arr = np.array(l)
arr[ (minus < arr) & (arr < plus)]
答案 2 :(得分:1)
只需将其转换为numpy数组,然后从那里转换数学:
l = np.array(l)
l[(l >= 69) & (l <= 71)]
是的。