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

时间:2018-02-23 09:26:43

标签: python python-3.x

我的代码存在问题:

问题陈述:计算字典中列表中的连续两个。

例如: 如果列表是[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

。我做错了吗?

3 个答案:

答案 0 :(得分:2)

这听起来像是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对可迭代的连续元素进行分组。它返回每个元素(本例中为k)和一个组迭代器,它可以转换为一个列表。上面的代码总结了每个组迭代器的长度,在减去一个之后用一个键2,因为第一个元素不按照你的规则计算。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这样的事情会起作用吗?

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.5/tkinter/__init__.py", line 1562, in __call__
File "/usr/lib/python3.5/tkinter/__init__.py", line 608, in callit
File "/home/pi/Documents/loggerprojekt/gui.py", line 34, in do_start
OSError: [Errno 24] Too many open files