Python列表中每个元素前面连续重复次数的数列统计

560 阅读1分钟

有如下列表a,需要实现统计列表中对应位置的前面连续重复次数(比如当前位置的数字为1,如果前面没有出现过当前数字,则次数为0,否则当前数字在前面出现过几次统计几次),然后组成一个新的列表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]

实现过程

方法一:定义变量flag为标志进行处理,如果当前数字出现过则加1,否则为0

list1=[1,1,1,0,0,0,1,1,0,1,1,1,1,1,1]
result=[0]
flag=0

for i in range(1,len(list1)):    
    if list1[i]==list1[i-1]:        
        flag+=1        
    else:        
        flag=0    
    result.append(flag)
print(result)

方法二:逻辑跟方法一差不多,换汤不换药

list1 = [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]result = [0] * len(list1)result[0] = 0for i in range(1, len(list1)):    if list1[i] != list1[i-1]:        result[i] = 0    else:        result[i] = result[i-1] + 1print(result)

方法三:这个方法就是判断当前的数据和之前的pre_num数据是否相同,不相同就将num赋值给pre_num,以此类推。

list1 = [1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1]result = [0] * len(list1)  # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]pre_num = 0for num in range(len(list1)):    # print("list1[num]:", list1[num])    # print("list1[pre_num]: ", list1[pre_num])    print(num, pre_num)    if list1[num] != list1[pre_num]:        pre_num = num    result[num] = num - pre_num    print(result)print(result)