一、题目
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的重复循环,使我联想到抛硬币。。可以计算重复正面的次数。