如果参数为False,则从列表中删除项目

时间:2016-11-06 00:15:56

标签: python python-3.x

我的代码是检查时间是否有效,它返回列表的True和False,取决于,但是我想要它是否为False从列表中删除它。

这是我的代码

def markValid(s):
        a = []
        if len(s) > 2:
            if s[1] - s[0] > 0.1:
                a.append(True)
            else:
                a.append(False)
            for i in range(1, len(s) - 1):
                if s[i] - s[i - 1] < 0.1 or s[i + 1] - s[i] < 0.1:
                    a.append(False)
                else:
                    a.append(True)
            if s[-1] - s[-2] > 0.1:
                a.append(True)
            else:
                a.append(False)
            return a
        if len(s) == 1:
            return [True]
        if len(s) == 2 and s[1] - s[0] > 0.1:
            return [True, True]
        else:
            return [False, False]

1 个答案:

答案 0 :(得分:2)

不要追加False s?

但是,如果我理解正确,您想要过滤输入列表,对吧?如果是这种情况,您可以使用当前功能

>>> test=[5.1, 5.6, 6.0, 10.34, 10.37, 10.45, 12.5]
>>> markValid(test)
[True, True, True, False, False, False, True]
>>> [x for x,m in zip(test,markValid(test)) if m]
[5.1, 5.6, 6.0, 12.5]
>>> 

如果不是这种情况,可以选择过滤

>>> [x for x in markValid(test) if x ]
[True, True, True, True]
>>> 

在过滤数据的情况下,您也可以使用原始函数获得相同的效果,而不是附加True将值附加到位置i,否则不执行任何操作,并且在其他情况下返回原始列表或相应的空列表,对您的代码进行一些小的更改

def filterValid(s):
    if len(s) > 2:
        a=[]
        if s[1] - s[0] > 0.1:
            a.append(s[0])
        for i in range(1, len(s) - 1):
            if not( s[i] - s[i - 1] < 0.1 or s[i + 1] - s[i] < 0.1 ):
                a.append(s[i])
        if s[-1] - s[-2] > 0.1:
            a.append(s[-1])
        return a
    if len(s) == 1:
        return s
    if len(s) == 2 and s[1] - s[0] > 0.1:
        return s
    return []

并测试它

>>> filterValid(test)
[5.1, 5.6, 6.0, 12.5]
>>>