计算数组中的连续实例

时间:2014-03-12 13:29:58

标签: python

我的代码目前返回一行包含print(line)的CSV文件:

['0', '0', '0', '0', '0', '0', '0', '0', '1', '0', 'B']

我想计算连续的零实例,为我在该行的一个区块中提供最大的可用空间(座位预订系统项目)。我还想计算零的数量,给我两个值 - 最大的零块和列表中的零总数。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

使用itertools.groupby()按零运行分组:

from itertools import groupby

max_run = 0
totalcount = line.count('0')
if totalcount:
    max_run = max(sum(1 for _ in g) for k, g in groupby(line) if k == '0')

需要if,因为如果行中没有'0'值,max()会抛出一个抱怨空序列的异常。

演示:

>>> from itertools import groupby
>>> line = ['0', '0', '0', '0', '0', '0', '0', '0', '1', '0', 'B']
>>> line.count('0')
9
>>> max(sum(1 for _ in g) for k, g in groupby(line) if k == '0')
8

答案 1 :(得分:2)

>>> from itertools import groupby
>>> lis = ['0', '0', '0', '0', '0', '0', '0', '0', '1', '0', 'B']

总数:

>>> lis.count('0')
9

最大连续零:

>>> max(sum(1 for _ in g) for k, g in groupby(lis) if k=='0')
8