Python中如何按指定关键词(start/end)拆分列表?
列表拆分问题解决方案
能不能用.split()方法实现?
不行,因为split()是字符串的内置方法,列表本身没有这个方法。如果非要模拟类似效果,得先把列表转成字符串(比如用特殊分隔符拼接),再拆分后转回列表,但这种方法有局限性——如果列表元素包含你选的分隔符,就会出错,不如直接遍历列表高效。
修复你当前的索引方法问题
你现有的代码有三个问题:
- 列表切片是左闭右开,
lst[starting_ind[i]: ending_ind[i]]不会包含end元素,得改成ending_ind[i]+1才能把end包含进去; - 你只处理了
start到end的片段,漏掉了开头的a段、end和下一个start之间的a段; temp += x是把x里的元素逐个追加到temp,而不是添加子列表,应该用temp.append(x)。
修复后的代码如下:
lst = ['a', 'a', 'a', 'start', 'b', 'end', 'a', 'a','a','start','b','b','b','end','a','a','a','a','start','b','b','end'] starting_ind = [3, 9, 18] ending_ind = [5, 13, 21] temp = [] # 加入开头的a段 temp.append(lst[:starting_ind[0]]) for i in range(len(starting_ind)): # 加入start到end的完整片段(包含end) temp.append(lst[starting_ind[i]: ending_ind[i]+1]) # 如果不是最后一个end,加入后面的a段 if i < len(starting_ind) - 1: temp.append(lst[ending_ind[i]+1 : starting_ind[i+1]]) print(temp)
运行后就能得到你期望的结果。
更简洁的遍历方法(无需提前找索引)
不用提前手动找索引,直接遍历列表,维护一个当前子列表,按关键词拆分即可,代码更灵活:
lst = ['a', 'a', 'a', 'start', 'b', 'end', 'a', 'a','a','start','b','b','b','end','a','a','a','a','start','b','b','end'] result = [] current = [] for item in lst: if item == 'start': # 如果当前有未保存的元素,先加入结果 if current: result.append(current) current = [] current.append(item) elif item == 'end': # 把end加入当前子列表,再保存到结果,然后重置当前列表 current.append(item) result.append(current) current = [] else: # 普通元素直接加入当前子列表 current.append(item) # 处理遍历结束后可能剩下的元素(本例中没有,但留着更鲁棒) if current: result.append(current) print(result)
这段代码逻辑清晰,还能处理列表开头/结尾不是关键词的情况,适用性更强。
内容的提问来源于stack exchange,提问作者LibbyB
相关产品推荐
相关产品推荐

