训练连续的n个数

目录

这个高效一点:

效率低一点

字典方式:


这个高效一点:


def find_consecutive_ones(lst, n=4):
    indices = []
    count = 0

    # 遍历列表
    for i in range(len(lst)):
        if lst[i] == 1:
            count += 1
        else:
            count = 0  # 一旦遇到0,重置计数

        # 当找到连续n个1时,记录起始index
        if count == n:
            indices.append(i - n + 1)  # 起始index为当前index - n + 1

            # 为了找到多个连续序列,将count重置为n-1,以便继续寻找
            count = n - 1

    return indices

# 示例列表,长度20的0和1列表
lst = [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1]
indices = find_consecutive_ones(lst)

print(indices)

效率低一点

def find_consecutive_ones(lst, n=4):
    # 初始化滑动窗口中1的数量
    count = sum(lst[:n])

    indices = []

    # 遍历列表,检查每一个滑动窗口是否有n个连续的1
    for i in range(len(lst) - n):
        if count == n:  # 如果当前窗口内的1数量等于n,记录起始index
            indices.append(i)
        
        # 滑动窗口,更新count
        count += lst[i + n] - lst[i]

    # 检查最后一个窗口
    if count == n:
        indices.append(len(lst) - n)

    return indices

# 示例列表,长度20的0和1列表
lst = [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1]
indices = find_consecutive_ones(lst)

print(indices)

字典方式:

def find_consecutive_ones_dict(lst, n=4):
    # 初始化滑动窗口中 'valid' 键为 1 的数量
    count = sum(1 for i in range(n) if lst[i].get('valid') == 1)

    indices = []

    # 遍历列表,检查每一个滑动窗口是否有 n 个连续 'valid' 为 1
    for i in range(len(lst) - n):
        if count == n:  # 如果当前窗口内 'valid' 为 1 的数量等于 n,记录起始index
            indices.append(i)
        
        # 滑动窗口,更新 'valid' 为 1 的数量
        count += (lst[i + n].get('valid') == 1) - (lst[i].get('valid') == 1)

    # 检查最后一个窗口
    if count == n:
        indices.append(len(lst) - n)

    return indices

# 示例列表,包含字典,每个字典的 'valid' 键为 0 或 1
lst = [
    {'valid': 0}, {'valid': 1}, {'valid': 1}, {'valid': 1},
    {'valid': 1}, {'valid': 0}, {'valid': 1}, {'valid': 1},
    {'valid': 1}, {'valid': 1}, {'valid': 0}, {'valid': 1},
    {'valid': 1}, {'valid': 1}, {'valid': 1}, {'valid': 1},
    {'valid': 0}, {'valid': 1}, {'valid': 1}, {'valid': 1}
]

indices = find_consecutive_ones_dict(lst)

print(indices)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值