2017-10-05 55 views
0

我的数据集,我导入到Python作为一个列表:计数的连续三分球的数量在2D列表

My dataset which I imported into python as a list

有没有一种方法可以让我连续数的三分球数量最多?与第一行一样,输出应该是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 

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

+0

后list_r在代码中的字面的实际价值,因此对于[MCVE]看起来你指望在这两个的相邻对的数量,我们不需要motor.csv同一排。如果有人要求我找到最连续的3个,我不会想到这一点。你也可以在每行之后重置计数,但是直到完成后才打印结果。 –

+0

考虑'row.index(COL)的值时,有一个以上的''3''行中的'是什么。 –

回答

0

他们使用下列作为指导:

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

首先,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 
1

考虑使用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] 
0
import re 

data = [ 
    ['1', '2', '2', '3', '5', '6'], 
    ['1', '2', '3', '3', '4', '5'], 
    ['1', '2', '3', '3', '3', '4'] 
] 

max = 0 
for item in data: 
    match = re.search(r'3+', "".join(item)) 

try: 

    if len(str(match.group(0))) > max: 
     max = len(str(match.group(0))) 
except AttributeError: 
    pass 

print(max)