python - 查找列表中是否有三个连续的索引在python中不等于零

标签 python list

我是 python 初学者,所以我想我可以在这里寻求一些帮助。

为了简单起见,这里有两个只有 0 和 1 的输入列表:

 x = [1, 1, 1, 0, 1]
 y = [1, 1, 0, 1, 0]

我试图在 python 中定义一个为 x 返回 True 的逻辑,因为 它具有三个不等于零的连续元素;索引 0:2 都不等于零。 相同的函数不会为 y 返回任何内容,因为 y 没有三个不等于零的连续元素。我还指的是关于索引的连续性,而不是关于值的连续性!

除了解决此逻辑之外,如果原始条件为真,该函数还应返回索引和 3 个非零元素 block 的最后一个非零元素的值。

所以,假设我有一个名为 is_three_consecutive_non_zero 的假设函数,以下是该函数在任何一种情况下都会返回的内容:

is_three_consecutive_non_zero(x) # should evaluates to (True, 2, 1)

2是连续三个1组中最后一个1的索引,1是非零三个元素补丁的最后一个非零元素的值!

如果第一个输出为 false,则该函数不会返回任何其他内容。

这是一个烦人的三重嵌套 for 循环函数,带有几个 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 模块的衬板,那就太好了。 顺便说一句,这些列表很小,所以,我不关心时间或空间问题。我也只关心三个非零元素的 FIRST PATCH:

z = [0, 1, 1, 1, 1]
is_three_consecutive_non_zero(z) # evaluates to (True, 3, 1) which is consistent with what I want

非常感谢

最佳答案

这是您要找的吗?

def f(l):
    for i in range(len(l)-3):
        if all(l[i:i+3]):
            return True, i, l[i+2]
    return False, None, None

如果你只是想知道三个这样的值是否在列表中,一个衬垫是 any(all(l[i:i+3]) for i in range(len(l)- 3))

关于python - 查找列表中是否有三个连续的索引在python中不等于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43196249/

相关文章:

python - 在python中拼接图像

python - 将 Pandas 表的每一行转换为列表并添加到表中

c++ - 如何使用存储在列表中的特定范围的元素初始化 vector ?

c# - 用于查找项目的字典与列表

python - 将列表与不同大小的子列表组合

python - iter() 返回类型为 'dict_items' 的非迭代器

python - 如何修复 : jinja2. 异常。UndefinedError: 'csrf_token' 未定义

python - 如何在 Python 中进行指数和对数曲线拟合?我发现只有多项式拟合

python - Python 中的列表和类型

c - 从文本文件读取行到结构 C