Python学习笔记:统计列表中每个元素之前的重复次数
一、题目
a
为原始的列表,b
为统计后的结果。
a = [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]
b = [0, 1, 2, 0, 1, 2, 0, 1, 0, 0, 1, 2, 3, 4, 5]
二、解答
利用指针的方式,判断前一位与后一位是否相等。
# 方法一
a = [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]
# b = [0, 1, 2, 0, 1, 2, 0, 1, 0, 0, 1, 2, 3, 4, 5]
b = [0]
flag = 0 # 设定指针
for i in range(1, len(a)):
# print(i)
if a[i] == a[i-1]:
flag += 1
else:
flag = 0
b.append(flag)
print(b)
print(a)
# 方法二
b = []
flag = 0 # 设定指针
for i in range(len(a)):
flag = flag + 1 if a[i] == a[i-1] and i != 0 else 0
b.append(flag)
# 方法三
b = [0] * len(a)
for i in range(1, len(a)):
if a[i] != a[i-1]:
b[i] = 0
else:
b[i] = b[i-1] + 1
使用内置函数。
from functools import reduce
from itertools import groupby
a = [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]
b = reduce(lambda x, y: x + y, [[i for i in range(len(list(num)))] for item, num in groupby(a)])
for item, num in groupby(a):
print(item, list(num))
'''
1 [1, 1, 1]
0 [0, 0, 0]
1 [1, 1]
0 [0]
1 [1, 1, 1, 1, 1, 1]
'''
[[i for i in range(len(list(num)))] for item, num in groupby(a)]
# [[0, 1, 2], [0, 1, 2], [0, 1], [0], [0, 1, 2, 3, 4, 5]]
三、衍生思考
0、1的重复循环,使我联想到抛硬币。。可以计算重复正面的次数。
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)