You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表任务:查找最长连续1起始索引及指定连续1出现次数

解决列表中连续1的两个任务

给定每次程序运行时随机生成的列表a,示例如下:

a = [0,1,0,1,0,0,1,1,1,1,0]

每次运行程序时,列表a都是随机生成的。

任务1:找出最长连续1序列的起始索引

找出列表中最长的连续1序列(示例中为[1,1,1,1]),并输出其起始索引。

任务2:统计精确连续两个1的出现次数

统计列表a中精确连续两个1(即[1,1])的出现次数,连续三个及以上1的情况不计入统计。

你的尝试代码

a = [1,0,0,1,1,0,1,1,1,1]

counter = 1

for i in range(len(a)):
    if a[i] == 1:
        a[i] = counter
        counter += 1

print(a)

b = []
one_rows = []

for i in a:
    if i > 0:
        one_rows.append(i)
    if i == 0:
        b.append([one_rows])
        one_rows.clear()
print(b)

解决方案

任务1实现

遍历列表时记录当前连续1的起始位置和长度,同时跟踪最长序列的信息:

def find_longest_ones_start(a):
    max_len = 0
    current_len = 0
    current_start = -1
    longest_start = -1

    for idx, num in enumerate(a):
        if num == 1:
            if current_len == 0:
                current_start = idx
            current_len += 1
            if current_len > max_len:
                max_len = current_len
                longest_start = current_start
        else:
            current_len = 0
    return longest_start

# 测试示例
a = [0,1,0,1,0,0,1,1,1,1,0]
print(f"最长连续1的起始索引:{find_longest_ones_start(a)}")  # 输出:6

任务2实现

要统计精确的连续两个1,需确保这两个1的前后都不是1(或处于列表边界):

def count_exact_two_ones(a):
    count = 0
    n = len(a)
    for i in range(n - 1):
        if a[i] == 1 and a[i+1] == 1:
            # 检查前一个元素不是1(或当前是第一个元素)
            prev_valid = (i == 0) or (a[i-1] != 1)
            # 检查后一个元素不是1(或当前是倒数第二个元素)
            next_valid = (i+1 == n-1) or (a[i+2] != 1)
            if prev_valid and next_valid:
                count += 1
    return count

# 测试示例
a = [0,1,0,1,1,0,1,1,1,1,0]
print(f"精确连续两个1的次数:{count_exact_two_ones(a)}")  # 输出:1
a = [1,0,0,1,1,0,1,1,1,1]
print(f"精确连续两个1的次数:{count_exact_two_ones(a)}")  # 输出:1

内容的提问来源于stack exchange,提问作者Gergő Olgyay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:45:31