我的代码存在问题:
问题陈述:计算字典中列表中的连续两个。
例如: 如果列表是[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
。我做错了吗?
答案 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