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
相关产品推荐
相关产品推荐

