计算列表中的连续重复项。一次只考虑两位数
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))
我的代码有问题:
问题陈述:计算字典中列表中的连续二进制数。
例如: 如果列表是 [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))