我的代码是检查时间是否有效,它返回列表的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]
答案 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]
>>>