计算一段时间内的出现次数

时间:2020-10-23 08:48:10

标签: python

如果我有一个表格,其中每个月每天都有一个列,列数为1和0,是否可以计算我有1个分组的数量?

我的意思是,如果我有1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1,该月是否有办法说我有4+2+1+3+4+2+1系列以下1s

如果是的话,有没有办法使它更复杂一些,并通过将1和0分组为4个,然后是2个零,再加上2个,以此类推呢?

我有道理吗?

4 个答案:

答案 0 :(得分:0)

遍历数组,同时跟踪previous_character和counter。如果当前字符等于前一个字符,则增加计数器,否则将previous_character设置为当前字符,并将计数器重置为1。 每次发生此重置操作时,您都可以打印或将多个连接的字符保存在数组中。

答案 1 :(得分:0)

这应该可以帮助您:

string = '1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1'

num_lst = [int(element) for element in string.split(' ')]

occurrences = 0

prev = 0

occurrences_lst = []

for num in num_lst:
    if num == 1:
        occurrences += 1
    else:
        if occurrences != 0:
            occurrences_lst.append(str(occurrences))
        occurrences = 0

if occurrences == 1:
    occurrences_lst.append(str(occurrences))

print(' + '.join(occurrences_lst))

输出:;

4 + 2 + 1 + 3 + 4 + 2 + 1

答案 2 :(得分:0)

current_character = array[0]
counter = 1

for i in range(1, len(array)):
    if (array[i] == current_character):
        counter += 1
    else:
        print(current_character + " " + str(counter))
        current_character = array[i]
        counter = 1

答案 3 :(得分:0)

我理解您的问题的方式是您想要

  1. 将您的1和0序列拆分为连续的1和连续的0子序列
  2. 计算每个子序列的长度

您可以使用groupby模块中的函数itertools进行拆分:

from itertools import groupby

data = [1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1]
output = []
for value, subsequence in groupby(data):
    length = sum(1 for _ in subsequence)
    output.append((value, length))

print(output)
# [(1, 4), (0, 2), (1, 2), (0, 1), (1, 1), (0, 1), (1, 3), (0, 7), (1, 4), (0, 1), (1, 2), (0, 2), (1, 1)]
相关问题