Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列表拆分为相等的子列表,最后一个子列表由列表的第一个可能元素组成_Python_Python 2.7_List - Fatal编程技术网

Python 如何将列表拆分为相等的子列表,最后一个子列表由列表的第一个可能元素组成

Python 如何将列表拆分为相等的子列表,最后一个子列表由列表的第一个可能元素组成,python,python-2.7,list,Python,Python 2.7,List,我想将列表拆分为指定长度的子列表。如果最后一个块不具有指定的长度,它将从列表的第一个元素开始增加 def split_list(the_list, chunk_size): result_list = [] short = len(the_list) % chunk_size if short: # Add wrap-around elements from front of the_list the_list.extend(the_lis

我想将列表拆分为指定长度的子列表。如果最后一个块不具有指定的长度,它将从列表的第一个元素开始增加

def split_list(the_list, chunk_size):
    result_list = []
    short = len(the_list) % chunk_size
    if short:
        # Add wrap-around elements from front of the_list
        the_list.extend(the_list[:chunk_size-short])

    while the_list:
        result_list.append(the_list[:chunk_size])
        the_list = the_list[chunk_size:]

    return result_list

a_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(split_list(a_list, 3))
下面的Python程序生成除最后一个块之外的相等子列表

def split_list(the_list, chunk_size):
    result_list = []
    while the_list:
        result_list.append(the_list[:chunk_size])
            the_list = the_list[chunk_size:]

    return result_list

a_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print split_list(a_list, 3)
输出:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]]
我想要这样的东西:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]]

让我们使用
itertools.cycle
islice
尝试一个基于生成器的解决方案:

from itertools import cycle, islice         
def split_list(lst, n):    
     it = cycle(lst)
     for i in range(len(lst) // n + len(lst) % n):
         yield list(islice(it, n))
按如下方式调用函数:

>>> a_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(split_list(a_list, 3))
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]]

我个人更喜欢这里的生成器,因为块一次生成一个,效率很高。如果您想同时获得所有内容,可以对结果调用
list()
(就像我所做的那样)。

检查您是否会在最后一个列表块中缺货。如果是这样的话,添加所需数量的元素,从列表的前面复制

def split_list(the_list, chunk_size):
    result_list = []
    short = len(the_list) % chunk_size
    if short:
        # Add wrap-around elements from front of the_list
        the_list.extend(the_list[:chunk_size-short])

    while the_list:
        result_list.append(the_list[:chunk_size])
        the_list = the_list[chunk_size:]

    return result_list

a_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(split_list(a_list, 3))
输出:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 1, 2]]

一种方法是使用列表理解,然后根据需要将列表开头部分添加到最后一组

def split_list(the_list, chunk_size):
    chunks = [the_list[i:i+chunk_size] for i in range(0, len(the_list), chunk_size)]
    chunks[-1] += the_list[:(chunk_size - len(the_list)) % chunk_size]
    return chunks

我在Python2中有一个错误:“NameError:name'chunk'未定义”@DanielJames我在函数名上犯了一个错误,我刚刚纠正了这个错误。该死的,想到我即将演示一个关于地板分割和模数的修复,我的itertools需要根据您的更改进行大量工作,这就是我所拥有的:[[1,2,3],[4,5,6],[7,8,9]]。请检查一下是否有什么地方弄错了。@DanielJames Oops,我错了。意外地删除了我不应该在早期编辑中删除的内容。再次检查这是关于列表的。数组在Python中的含义有所不同。请固定标题和标签