如何基于指定元素“Bob”将Python列表拆分为符合要求的子列表
实现方案
单次遍历方案(推荐,适合大规模列表)
该方案仅需遍历原列表1次,时间复杂度为O(n),无额外查找开销,适配超大规模列表场景:
foo = ["Bob", 14, 20, "Sam", "Bob", 15, 23, "Bob", "Jim", 14] result = [] current_sublist = [] for element in foo: if element == "Bob": # 遇到分界元素时,先存入上一个已完成的子列表 if current_sublist: result.append(current_sublist) # 初始化新的子列表 current_sublist = [element] else: # 非分界元素直接追加到当前子列表 current_sublist.append(element) # 补充存入最后一个子列表 if current_sublist: result.append(current_sublist) print(result) # 输出结果:[["Bob", 14, 20, "Sam"], ["Bob", 15, 23], ["Bob", "Jim", 14]]
索引切片方案(写法更简洁)
如果列表规模不大,追求代码简洁度,可以先收集所有Bob的索引位置,再批量切片:
bob_positions = [idx for idx, val in enumerate(foo) if val == "Bob"] result = [foo[start:end] for start, end in zip(bob_positions, bob_positions[1:] + [None])]
该方案需要遍历列表2次(一次收集索引、一次切片),性能略低于单次遍历方案。
内容的提问来源于stack exchange,提问作者solitaria
相关产品推荐
相关产品推荐

