Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 统计一段时间内发生的事件_Python - Fatal编程技术网

Python 统计一段时间内发生的事件

Python 统计一段时间内发生的事件,python,Python,如果我有一个表,在一个月内每天有一列,序列为1和0,有没有可能计算我有多少个1的分组 我的意思是,如果我有11101010101001001001101,有没有办法说在那个月我有4+2+1+3+4+2+1系列的以下1 如果是这样的话,有没有办法让它更复杂一点,通过将1和0分组,如4个1,2个0,2个1等等 我说得通吗?在跟踪前一个字符和计数器的同时迭代数组。如果当前字符等于上一个字符,则增加计数器,否则将上一个字符设置为当前字符,并将计数器重置为1。 每次重置时,您都可以打印或在数组中保存大量连

如果我有一个表,在一个月内每天有一列,序列为1和0,有没有可能计算我有多少个1的分组

我的意思是,如果我有
11101010101001001001101
,有没有办法说在那个月我有
4+2+1+3+4+2+1
系列的以下1

如果是这样的话,有没有办法让它更复杂一点,通过将1和0分组,如4个1,2个0,2个1等等


我说得通吗?

在跟踪前一个字符和计数器的同时迭代数组。如果当前字符等于上一个字符,则增加计数器,否则将上一个字符设置为当前字符,并将计数器重置为1。 每次重置时,您都可以打印或在数组中保存大量连接的字符。

这将有助于您:

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

我对你问题的理解是,你想:

  • 将一和零的序列拆分为连续一和连续零的子序列
  • 计算每个子序列的长度
  • 您可以使用
    itertools
    模块中的函数
    groupby
    进行拆分:

    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)]
    

    所以这有点像使用循环代码,不是吗?你有没有想过在代码中会是什么样子?如果不是的话,我可以试着自己煮豆子,但如果你已经有了一个大概的想法,那绝对是棒极了<代码>字符上一个字符=数组[0];int计数器=1;对于(int i=1;i当前_字符=array[0]计数器=1,用于范围(1,len(array)):if(array[i]==当前_字符):counter+=1其他:打印(当前字符+“”+str(计数器))当前字符=数组[i]计数器=1@LazarBojanic您可以编辑答案以包含注释中提供的代码。在Python中,没有行结构的代码总是难看的,因为缩进的重要性更大。我想,您需要一个按周分组的代码(两个连续的零表示一个周末),其中缺少一周的开始日期。但是,仅仅因为中间休息一天,就把一周分成两个学期似乎不太有用。实际上,这与周末无关。只是为了观察一个月内缺货的演变,显然我可以很容易地计算出一个产品在一个月内缺货了多少天,但了解节拍很有意思。如果我有一款产品,比如说,一个月内缺货5天,但每周缺货一天或类似的时间,客户就不会费心去购买替代产品,但如果是在接下来的5天,那么肯定会有另一款产品在销售。我是一名预测分析师,因此调整最终需求数字非常重要。你理解正确,但我可能需要转换成一种可用的表格格式,如中所示,以了解月份的分布情况,并能够使用该格式进行计算,但我可能正在向前迈进(一如既往)哈哈,一步一步,将应用此解决方案,以及其他建议的解决方案,然后在需要时回来进一步实施。万分感谢Piotr!在Python中,您不需要在范围内循环
    i
    ——您可以直接在列表值上迭代,如:
    for char In array[1://code>。
    
    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)]