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列表中每个元素前面连续重复次数的数列统计

posted @ 2022-05-01 16:26  Hider1214  阅读(218)  评论(0编辑  收藏  举报