如何优雅地分割列表?

2 投票
3 回答
610 浏览
提问于 2025-04-16 19:41

可能重复的问题:
如何在Python中将列表分割成均匀大小的块?

我有一个函数,代码如下:

def split_list(self,my_list,num):    
    .....    
    .....

其中我的列表是:

my_list = [['1','one'],['2','two'],['3','three'],['4','four'],['5','five'],['6','six'],['7','seven'],['8','eight']]

我想根据给定的数字来分割这个列表:

比如说如果数字是3,那么输出将会是:[[['1','one'],['2','two'],['3','three']],[['4','four'],['5','five'],['6','six']],[['7','seven'],['8','eight']]]

如果数字是4,那么:

[[['1','one'],['2','two'],['3','three'],['4','four']],[['5','five'],['6','six'],['7','seven'],['8','eight']]]

3 个回答

0
def split_list(lst, num):
    def splitter(lst, num):
        while lst:
            head = lst[:num]
            lst = lst[num:]
            yield head
    return list(splitter(lst, num))

这里是从交互式命令行运行这个代码的一个片段:

>>> def split_list(lst, num):
...     def splitter(lst, num):
...         while lst:
...             head = lst[:num]
...             lst = lst[num:]
...             yield head
...     return list(splitter(lst, num))
...
>>> split_list(range(10), 3)
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
3

我会直接用列表推导式或者生成器来处理:

[my_list[x:x+num] for x in range(0, len(my_list), num)]

撰写回答