我是python初学者,所以我想我可以在这里寻求一些帮助。在
为了简单起见,这里有两个只有0和1的输入列表:x = [1, 1, 1, 0, 1]
y = [1, 1, 0, 1, 0]
我试图在python中定义一个对x返回True的逻辑,因为
它有三个不等于零的连续元素;指数0:2都不等于零。
同一个函数不会为y返回任何值,因为y没有三个不等于零的连续元素。我也指的是连续的指数,而不是数值!在
除了解决此逻辑之外,如果原始条件为真,函数还应返回由3个非零元素组成的补丁的最后一个非零元素的索引和值。在
假设我有一个假设函数,名为is_three_continuous_non_zero,这是函数在任何情况下都会返回的结果:
^{pr2}$
2是连续三个一组中最后一个1的索引,1是非零三个元素块的最后一个非零元素的值!在
如果第一个输出为false,则函数不返回任何其他值。在
下面是一个烦人的三元组嵌套for loop函数,有几个if条件可以作为一个好的起点:def is_three_consecutive_non_zero(list):
if 0 not in list:
return True, len(list)-1, list[len(list)-1]
for l in range(0, len(list)):
for m in range(1, len(list)):
for n in range(2, len(list)):
if (l != m) & (m != l) & (n == m + 1) & (m == l + 1):
if (list[l] != 0) & (list[m] != 0) & (list[n] != 0):
return True, n, list[n]
让我们试试:is_three_consecutive_non_zero(x)
is_three_consecutive_non_zero(y)
如果您可以共享任何更好的逻辑,或者可以是一个或两个利用任何其他可用python模块的行程序,那就太好了。
顺便说一句,这些清单很小,所以,我不关心时间或空间的问题。我也只关心三个非零元素的第一个补丁:z = [0, 1, 1, 1, 1]
is_three_consecutive_non_zero(z) # evaluates to (True, 3, 1) which is consistent with what I want
非常感谢