首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算二维表中连续3的个数

计算二维表中连续3的个数
EN

Stack Overflow用户
提问于 2017-10-06 01:45:26
回答 4查看 134关注 0票数 0

我将数据集作为列表导入到python中:

有没有办法可以计算连续3的最大数目?像第一行一样,输出应该是5,因为有5个连续的3。

代码语言:javascript
运行
复制
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

这是我写的代码,但我似乎得到了不正确的输出。

EN

回答 4

Stack Overflow用户

发布于 2017-10-06 02:03:01

考虑使用itertools.groupby将列表分解为具有相同值的子序列。然后简单地返回子序列的最大长度。

代码语言:javascript
运行
复制
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]
票数 1
EN

Stack Overflow用户

发布于 2017-10-06 01:48:14

他们希望使用以下内容作为指导:

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2017-10-06 02:00:58

首先,row.index(col)将始终生成行中col的第一个值的索引。这显然不是我们的初衷。相反,我建议使用enumerate同时迭代行中的值和索引。

其次,您只跟踪连续3的当前数量,并且没有代码来跟踪此计数值的最大值。向代码中添加另一个变量和else子句可以解决此问题。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46591822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档