使用列表中其他值的函数在python中过滤列表。 counts=misc。排列 就我而言: 若i10,那么我想将10设置为等于-1。然后,我将筛选列表>=0中的所有值

使用列表中其他值的函数在python中过滤列表。 counts=misc。排列 就我而言: 若i10,那么我想将10设置为等于-1。然后,我将筛选列表>=0中的所有值,python,list,function,filter,Python,List,Function,Filter,我想做的是将列表中小于两个邻居平均值一半的所有值设置为-1。i、 e.对于列表[10,20,10,25,30.]如果i=3,那么我想看看10是否小于(20+25)/4,因为这是45/4>10,那么我想将10设置为等于-1。然后,我将筛选列表>=0中的所有值 更复杂的是,你应该从i+1开始,因为这个过程不适用于第一个值,然后你应该以-1结束,因为这个过程不适用于最后一个值。任何帮助都将不胜感激 您可以从中借用滑动窗口生成器,然后像这样使用它: counts = misc. array f

我想做的是将列表中小于两个邻居平均值一半的所有值设置为-1。i、 e.对于列表[10,20,10,25,30.]如果i=3,那么我想看看10是否小于(20+25)/4,因为这是45/4>10,那么我想将10设置为等于-1。然后,我将筛选列表>=0中的所有值


更复杂的是,你应该从i+1开始,因为这个过程不适用于第一个值,然后你应该以-1结束,因为这个过程不适用于最后一个值。任何帮助都将不胜感激

您可以从中借用滑动窗口生成器,然后像这样使用它:

counts = misc. array

    for i in counts:
        if i < "(sum of the two integers next to i)/4"
            return -1
其中
l
是您的列表


这将删除第一个和最后一个元素。如果您愿意,可以很容易地对它们执行不同的操作(例如设置为-1)。

这是否符合您的要求(假设值位于列表
数据中)

就像这样:

filtered = [data[i] for i in range(1,len(data)-1) if data[i] >= (data[i+1]+data[i-1])/4]
-
x
是计数中的idex-->表示范围内的x(len(计数[1:-1])
-
x+1
因为我们知道计数[0]和计数[-1]都已超出。因此,要获得结果,必须对其进行调整
-
if count[x]>counts[x-1]/counts[x+1]/4 else-1
test,如果结果为真,则返回结果,否则返回-1
注意
>0
,它与您想要的相反
-
用于范围内的x(len(计数[1:-1])

因为我们知道第一个和最后一个值是无关紧要的
-
计数[1:-1]
如上所述,最好使用线程安全的列表副本

这应该有效,将为您提供有效的
(!=-1)
和无效的
(=-1)
计数中每个索引的结果列表

问题是,你能对结果做些什么

您可以测试,例如:(注意结果中的调整的x)


这将为您提供计数的镜像,结果为假或真

我有一个看起来不太优雅的解决方案,但我相信它是正确和可理解的。其中包括筛选,因此如果允许值为-1,它也会起作用

我使用3个变量(a、b和I)和3个标志变量(fa、fb和fi),它们显示值是否需要包含在结果集中

 ['N/A'] + [(x if x!= -1 else False) for x in result] + ['N/A']
def测试(lst): a、 fa,b,fb,res=None,False,None,False,[] 对于lst中的i: 如果a不是无: fi=b<(a+i)/4 其他: fi=真 如果fa: 决议(a) a、 fa=b,fb b、 fb=i,fi 如果fa: 决议(a) 决议草案(b) 返回res 打印(测试([10,20,10,25,30])) => [10.0, 20.0, 25.0, 30.0]
这个用户(新用户号)刚刚问了他的第一个问题,这对他有什么帮助?我的答案不是最好的。。。
result = [(x+1 if counts[x] > counts[x-1]/counts[x+1]/4 else -1) for x in range(len(counts[1:-1]))]
 ['N/A'] + [(x if x!= -1 else False) for x in result] + ['N/A']
def test(lst):
    a, fa, b, fb, res  = None, False, None, False, []
    for i in lst:
        if a is not None:
            fi = b < (a + i)/4
        else:
            fi = True
        if fa:
            res.append(a)
        a, fa = b, fb
        b, fb = i, fi
    if fa:
        res.append(a)
    res.append(b)
    return res

print(test([10., 20., 10., 25., 30.]))
=> [10.0, 20.0, 25.0, 30.0]