You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何利用Lead和Lag按条件拆分列表:将列表拆分为以1开头的子列表

当然有简便的方法啦!针对你这个把列表按1的出现位置拆分的需求,我给你分享两种实用的Python实现方式,都能轻松搞定:

方法一:通过索引切片实现

先找出所有1在原列表中的索引位置,再利用这些索引对原列表进行切片,就能快速得到所有子列表:

l = [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4]
# 获取所有值为1的元素的索引
start_indices = [i for i, num in enumerate(l) if num == 1]
# 把列表末尾的位置(len(l))加入索引列表,作为最后一个切片的结束位置
end_indices = start_indices[1:] + [len(l)]
# 按索引对原列表切片,生成子列表
result = [l[start:end] for start, end in zip(start_indices, end_indices)]

# 如果你需要单独赋值给l1、l2、l3
l1, l2, l3 = result
print(l1)  # [1, 2, 3, 4, 5]
print(l2)  # [1, 2, 3, 4]
print(l3)  # [1, 2, 3, 4]

这种方法逻辑清晰,适合列表规模不大的场景,代码也比较简洁。

方法二:遍历列表实时构建子列表

如果你不想先找索引,也可以直接遍历原列表,遇到1就新建一个子列表,把后续元素加入当前子列表,直到下一个1出现:

l = [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4]
result = []
current_sublist = []

for num in l:
    if num == 1:
        # 如果当前子列表不为空,先把它加入结果列表
        if current_sublist:
            result.append(current_sublist)
        # 新建一个以1开头的子列表
        current_sublist = [num]
    else:
        # 非1的元素直接加入当前子列表
        current_sublist.append(num)
# 记得把最后一个子列表加入结果
if current_sublist:
    result.append(current_sublist)

l1, l2, l3 = result
print(l1)  # [1, 2, 3, 4, 5]
print(l2)  # [1, 2, 3, 4]
print(l3)  # [1, 2, 3, 4]

这种方法不需要额外存储索引,遍历一次就能完成拆分,效率也不错,适合处理较大的列表。

另外你提到的lead和lag(也就是当前元素的下一个/上一个元素),其实在这个需求里没必要用到,因为我们的拆分规则很明确——只要遇到1就作为新子列表的开头,用上面两种方法就足够简单高效啦。

内容的提问来源于stack exchange,提问作者Henri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 07:47:41