首页 > 解决方案 > 如何找到列表的最长连续非零子集?

问题描述

我有一个看起来像这样的浮动列表:

[
 163.33333333333334,
 0.0,
 0.0,
 154.73684210526315,
 172.94117647058823,
 155.8303886925795,
 0.0,
 156.93950177935943,
 0.0,
 0.0,
 0.0,
 151.5463917525773,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 165.1685393258427,
 156.93950177935943,
 169.6153846153846,
 159.7826086956522,
 167.04545454545453,
 158.06451612903226,
 168.9655172413793,
 157.5,
 0.0,
 159.7826086956522,
 0.0,
 163.94052044609666,
 166.41509433962264,
 0.0,
 0.0,
 0.0,
]

实际列表比这大得多,但具有相似的值。从这个列表中,我想找到这个非零的最大连续子集。在这种情况下,这将是:


 [165.1685393258427,
 156.93950177935943,
 169.6153846153846,
 159.7826086956522,
 167.04545454545453,
 158.06451612903226,
 168.9655172413793]

我是 python 和 python 以及一般编码的新手,所以任何帮助将不胜感激。

标签: pythonarrayssubset

解决方案


您可以使用带缓冲区的简单算法

做一个for循环,然后获取当前子集,然后如果当前子集的长度大于最大值,则设置为最大值。

def get_longest_consecutive_non_zero_subset(input_list: list) -> list:

    max_subset = []
    current_max_subset = []

    for number in input_list:
        if number > 0:
            current_max_subset.append(number)
        else:
            if len(current_max_subset) > len(max_subset):
                max_subset = current_max_subset
            current_max_subset = []

    return max_subset


test_list = [0, 1, 2, 3, 0, 0, 1, 2, 3, 4, 0]
result = get_longest_consecutive_non_zero_subset(test_list)

print(result)
assert result == [1, 2, 3, 4]


推荐阅读