【问题标题】:Grouping a set of like numbers in a Python List [closed]在Python列表中分组一组相似的数字[关闭]
【发布时间】:2020-10-22 22:31:12
【问题描述】:

我有一个任务要求我检查一个二进制数据集并将 1 的簇识别为一个峰值。作为作业条件的一部分,我无法使用任何其他库,只能使用基本的 Python 知识创建代码。

例如,我有一个数据集[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]。统计 1 的簇表示峰的数量为 2。

另一个例子是[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0]。我应该产生一个结果,说有 3 个峰值。

我不确定如何解决这个问题,任何建议都会有所帮助

【问题讨论】:

  • 你知道你会如何在纸上做吗?从那开始,然后想想如何在代码中做每一件事,如果你遇到困难,寻找如何做那件特定的事情。这应该足够简单,您只需要一个概念(也就是您在纸上的实现方式),然后只需要基本的 Python 知识/教程。

标签: python list


【解决方案1】:

循环遍历数据并增加peaks,前提是每个峰值还没有这样做

counted_peak = False
peaks = 0
for v in data:
    if v:
        if not counted_peak:
            peaks += 1
            # set to True so that it only increments once for each peak
            counted_peak = True
    else:
        counted_peak = False

【讨论】:

    【解决方案2】:

    有很多方法可以解决这个问题。我们在这里所做的是跟踪一个计数器t,并在我们看到一个新集群时将其递增(如果我们看到一个1 并且最后一个值为0 或不存在,则会发生这种情况)。由于我们需要知道最后一个值是 0 还是不存在,所以我们也在变量 lz 中跟踪它。

    def foo(L):
      t, lz = 0, 1
      for x in L:
        t, lz = t+lz*x, 1-x
      return t
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 2022-01-03
      • 1970-01-01
      • 2021-08-18
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      相关资源
      最近更新 更多