python - 查找列表中的序列号及其开始和结束索引
问题描述
所以我有一个包含一些值的列表,例如:
timeSum = [0,0,0,1,1,2,3,3,3,2,3]
我需要得到包含最大值的区间边界。
所以我创建了一个包含最大值索引的列表:
maxTime = [i for i, j in enumerate(timeSum) if j == max(timeSum)]
这给了我:[6,7,8,10]
。
现在,据我所知,我需要找到序列号边界的序列才能获得类似的输出:6:8
,10
但我不太确定该怎么做。
解决方案
我想我解决了这个问题。请看下面的代码。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
timeSum = [0,0,0,1,1,2,3,3,3,2,3]
maxTime = [i for i, j in enumerate(timeSum) if j == max(timeSum)]
is_range = []
not_range = []
for i in range(len(maxTime)):
try:
if maxTime[i + 1] - maxTime[i] == 1:
is_range.append(f"{maxTime[i]}:{maxTime[i + 1]}")
except:
if str(maxTime[i]) not in "".join(is_range):
not_range.append(maxTime[i])
def f(arg):
for i in range(len(arg)):
try:
split1 = arg[i].split(":")
split2 = arg[i + 1].split(":")
if split1[-1] == split2[0]:
arg[i] = arg[i].replace(split1[-1], split2[-1])
arg.pop(i + 1)
except:
pass
for i in range(len(arg)):
try:
split1 = arg[i].split(":")
split2 = arg[i + 1].split(":")
if split1[-1] == split2[0]:
return f(arg)
else:
return arg
except:
return arg
new_list = f(is_range)
new_list.extend(not_range)
print(new_list)
输出1:
['6:8', 10]
如果列表如下所示,
timeSum = [0,0,0,1,1,2,3,3,3,2,3,3,3]
输出2:
['6:8', '10:12']
如果列表如下所示,
timeSum = [0,0,0,1,1,2,3,3,3,3,2,3,3,3,3]
输出如下:
输出3:
['6:9', '11:14']
推荐阅读
- node.js - Lambda:属性层的值必须是字符串列表类型
- r - 如何从 R 导出和保存矢量
- java - 为什么即使使用 Spring Data JPA 与 CascadeType.PERSIST 也必须同步双向关系
- powershell - Powershell ps1 脚本运行 bat 文件但 CMD 屏幕在执行后关闭
- swift - SwiftUI - 基于 ObservedObject 的条件在后续视图中不起作用
- javascript - 尝试获取通道时未定义客户端
- opengl - 使用 OpenGL 制作一个简单的 2D 库
- c++ - 有没有更简洁的方法来传递函数结果,如此处所示
- java - 可以将 maven-javadoc-plugin 配置为不包含生成日期吗?
- python - 在水平堆积条形图中对齐值标签 (Matplotlib)