python - 如何找到列表的最长连续非零子集?
问题描述
我有一个看起来像这样的浮动列表:
[
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 以及一般编码的新手,所以任何帮助将不胜感激。
解决方案
您可以使用带缓冲区的简单算法
做一个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]
推荐阅读
- mongodb - 将 MongoDB 从 4.2.9 升级到 4.4.0:Location13111:未找到字段,预期类型日期
- php - PHP 会话突然停止为某些页面工作
- amazon-web-services - 如何将查询 dynamodb xray 作为自定义段的子段?
- php - MySQL中的哈希十进制
- ruby-on-rails - Heroku:错误 - /bin/sh:1:npm:部署到 Heroku 时未找到
- python - Python tesseract以正确的列顺序从图像中提取数据
- javascript - 如何将页面中输入的名称和值保存到 javascript 中的对象中?
- css - CSS:野生动物园动画问题
- haskell - 为什么关联类型同义词不暗示约束
- java - 带有 SSL 的 Selenium 网格 4 - 设置工作但无法从代码创建驱动程序