Skip to main content
 首页 » 编程设计

Python根据子列表中的第一个元素将列表拆分为子列表

2025年05月04日10落叶

我想拆分一个看起来像这样的列表:

list = [5, a, b, c, d, e, 2, a, b, 4, a ,b ,c ,d , ...] 

进入这个:

list  = [ [5, a, b, c, d, e], [2, a, b] , [4, a ,b ,c ,d] ...] 

第一个元素/数字是可变的,所以没有模式将它分成偶数 block 。 block 的大小或长度应基于 block 的第一个元素。 此外,字母只是占位符,使示例更具可读性,实际上字母是 float 和数字。

所以大列表真的看起来像这样:

list = [5, 7, 3.2, 3.1, 4.6, 3, 2, 5.1, 7.1, 4, 5.12 ,3.4 ,4.8 ,12.1 , ...] 

请您参考如下方法:

简单的方法,读取每个 block 长度 n 并包含接下来的 n 个值:

it = iter(l) 
[[n, *islice(it, n)] for n in it] 

Python 2 版本:

it = iter(l) 
[[n] + list(islice(it, n)) for n in it] 

或者没有islice:

it = iter(l) 
[[n] + [next(it) for _ in range(n)] for n in it] 

演示:

>>> from itertools import islice 
>>> l = [5, 'a', 'b', 'c', 'd', 'e', 2, 'f', 'g', 4, 'h' ,'i' ,'j' ,'k'] 
>>> it = iter(l) 
>>> [[n, *islice(it, n)] for n in it] 
[[5, 'a', 'b', 'c', 'd', 'e'], [2, 'f', 'g'], [4, 'h', 'i', 'j', 'k']]