【问题标题】:find the length of the longest consecutive series of numbers [duplicate]找到最长的连续数字序列的长度[重复]
【发布时间】:2013-05-19 22:51:51
【问题描述】:

我有一个像这样[1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1] 的 numpy 数组我想找到最长的连续序列的长度,无论是 1 还是 -1。在示例中,它应该是 3

【问题讨论】:

  • 您想要numpy 解决方案还是纯python 解决方案好吗?使用itertools.groupby 很简单...
  • 所以在这种情况下的输出应该是 2 (-1-1) 对吗?...或者只是缺少一个 "," 而你实际上想要 3 (1,1,1) ?
  • @Bakuriu 所有纯 python 解决方案都是 numpy 解决方案。唯一的转折是,有时特定于 numpy 的解决方案会更好或更快。
  • @AdrianRatnapala 该解决方案仅适用于位(尽管它相似)它不一样

标签: python numpy


【解决方案1】:

在纯 Python 中

>>> from itertools import groupby
>>> L = [1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,-1]
>>> max(sum(1 for i in g) for k,g in groupby(L))
3

【讨论】:

  • 没有比这更简单的了。 +1
  • itertools 很好用!
  • @jszakmeister,只要问题包含“连续”这个词,groupby() 应该是你的第一件事
  • 绝妙的答案!并且简洁!
【解决方案2】:

与@AlexMartelli的回答类似

>>> import numpy as np
>>> nums = np.array([1,1,1,-1-1,1,-1,1,1,-1,-1,-1,1,-1])
>>> run_ends = np.where(np.diff(nums))[0] + 1
>>> np.diff(np.hstack((0, run_ends, nums.size))).max()
3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多