Simeon Aleksov
Simeon Aleksov

Reputation: 1325

Removing items from list if argument is False

My code is to check if the time is valid, it returns list with True and False, depends, however I want if it's False to remove it from the list.

Here's my code

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]

Upvotes: 0

Views: 89

Answers (1)

Copperfield
Copperfield

Reputation: 8510

just don't append the Falses?

however if I understand correctly, you want to filter your input list, right? If that is the case you can use your current function for that like

>>> 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]
>>> 

if that is not the case, here is an alternative to filter

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

In the case of filtering your data you can also get the same effect with your original function by instead of appending True append the value in position i and do nothing otherwise, and in the others cases return the original list or a empty list accordingly, with some minor changes to your code

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 []

and testing it

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

Upvotes: 2

Related Questions