计算列表中的连续重复项。一次只考虑两位数

counting consecutive duplicates in a list. Considering only two digits at a time

我的代码有问题:

问题陈述:计算字典中列表中的连续二进制数。

例如: 如果列表是 [2,1,0,2,2,2] 那么答案就是 3 即 (2,2) 和 (2,2)

这是我写的代码

import ast
def calstats(data_dict):
    consec2Cnt = 0
    for key,value in data_dict.items():
        for i in range(len(value)-1):
            if int(value[i]) == int(value [i+1]) and int(value[i]) == 2 and int(value[i+1]) == 2:
                consec2Cnt += 1
    return(consec2Cnt)
    #print(str(consec2Cnt))

sumCnt = 0
fileinput = open("1.txt",'r')
lines = fileinput.readlines()
data_dict = {}
for eline in lines:
    data_dict = eline.strip()
    sumCnt += calstats(ast.literal_eval(data_dict))
print(sumCnt)

The link to the file is given here

我得到的最终结果是

205

。但正确答案是

213

。我做错了什么吗?

a = [3, 2, 2, 2, 4, 2, 2, 2]
count = 0
for i in range(len(a)-1):
    if a[i: i+2] == [2, 2]:
        count += 1
print(count)

输出:4

这听起来像是 itertools.groupby 的情况:

from itertools import groupby

mylist = [2,2,0,1,1,2,2,2,2,1,1,0,0,2,2,2,0,2]

n = sum(len(list(v))-1 for k, v in groupby(mylist) if k == 2)

#output
6

Groupby 对可迭代的连续元素进行分组。它 returns 每个元素(本例中为 k)连同一个组迭代器,可以将其转换为列表。上面的代码在减去一个之后,将每个键为 2 的组迭代器的长度相加,因为第一个元素不符合您的规则。

这样的东西行得通吗?

yourList = [3, 2, 2, 4, 3, 3, 2] 

def counter(a):
  b = 0
  x = 0
  for i in a:
    if i == b and i == 2:
      x += 1 
    b == i
  return x

print(counter(yourList))