我将数据集作为列表导入到python中:
有没有办法可以计算连续3的最大数目?像第一行一样,输出应该是5,因为有5个连续的3。
import csv
r = csv.reader(open('motor.csv'))
list_r = list(r)
for row in list_r:
print
count = 0
for col in row:
if col == '3' and row[row.index(col)+1] == '3':
count+=1
print count
这是我写的代码,但我似乎得到了不正确的输出。
发布于 2017-10-06 02:03:01
考虑使用itertools.groupby
将列表分解为具有相同值的子序列。然后简单地返回子序列的最大长度。
from itertools import groupby
list_r = [
['3','3','3','3','3','1','3','3','5'],
['1','2','3','3','3','3','3','3','1','3','3','5','3'],
['3','2','3','3','3','3','3','3','1','3','3','5'],
]
result = [
max(len(list(g)) for k, g in groupby(row) if k == '3')
for row in list_r
]
assert result == [5, 6, 6]
发布于 2017-10-06 01:48:14
他们希望使用以下内容作为指导:
import itertools
def consecutive(group):
first, second = itertools.tee(group)
second.next()
for first, second in itertools.izip(first, second):
if second != first + 1: return False
return True
def iterate_submatrix(matrix, t, l):
'''yield the horizontals and diagonals of 4x4 subsection of matrix starting at t(op), l(eft) as 4-tuples'''
submat = [row[l:l+4] for row in matrix[t:t+4]]
for r in submat: yield tuple(r)
for c in range (0,4):
yield tuple(r[c] for r in submat)
yield tuple(submat[rc][rc] for rc in range (0,4))
yield tuple(submat[rc][3-rc] for rc in range(0,4))
for item in iterate_submatrix(test_matrix, 0,0):
print item, consecutive(item)
发布于 2017-10-06 02:00:58
首先,row.index(col)
将始终生成行中col
的第一个值的索引。这显然不是我们的初衷。相反,我建议使用enumerate
同时迭代行中的值和索引。
其次,您只跟踪连续3的当前数量,并且没有代码来跟踪此计数值的最大值。向代码中添加另一个变量和else
子句可以解决此问题。
for row in list_r:
max_count = current_count = 0
for index, value in enumerate(row[:-1]):
if value == '3' and row[index+1] == '3':
current_count += 1
else:
max_count = max(current_count, max_count)
current_count = 0
print count
https://stackoverflow.com/questions/46591822
复制相似问题