Matlab中查找连续'BS'字符串的起止索引问题
查找列表中连续出现字符串的起始和结束索引
首先注意:你给出的代码里用了集合{},集合是无序且自动去重的,这会丢失原有的元素顺序和重复的'BS',所以必须改成列表[]才能处理连续元素的需求。修正后的列表如下:
a = ['AHA','HQJ','KAL','BS','BS','BS','AKL','UQI','BS','BS','ALO','ZHT','KAH','KIO','AAL']
实现思路
- 遍历列表,跟踪连续'BS'的起始索引(1-based)
- 当遇到非'BS'元素时,若当前正处于连续'BS'的跟踪状态,就记录这段连续区间的起始和结束索引
- 遍历结束后,还要检查是否有未记录的末尾连续'BS'段
代码实现
a = ['AHA','HQJ','KAL','BS','BS','BS','AKL','UQI','BS','BS','ALO','ZHT','KAH','KIO','AAL'] target = 'BS' result = [] start = None for idx, item in enumerate(a, 1): # 用1-based索引遍历 if item == target: if start is None: start = idx else: if start is not None: result.append([start, idx - 1]) start = None # 处理列表末尾的连续段 if start is not None: result.append([start, len(a)]) print(result) # 输出: [[4, 6], [9, 10]]
代码说明
enumerate(a, 1)让遍历的索引从1开始,直接匹配你需要的结果格式start变量用于标记连续'BS'的起始位置,当遇到第一个'BS'时赋值,遇到非'BS'时结束标记并记录区间- 遍历结束后额外检查一次,避免遗漏列表末尾的连续'BS'段
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

