Reputation: 1325
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
Reputation: 8510
just don't append the False
s?
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