根据项目的长度将python列表分块

根据项目的长度将python列表分块,python,list,limit,chunks,slice,Python,List,Limit,Chunks,Slice,我在这里看到了一些关于如何将Python列表拆分为块的好文章,如。 大多数帖子处理的是分割块或将列表中的所有字符串连接在一起,然后根据正常的切片例程进行限制 然而,基于角色限制,我需要执行类似的操作。如果您有一个句子列表,但无法截断列表中的任何片段 我可以在这里编写一些代码: def _splicegen(maxchars, stringlist): """ Return a list of slices to print based on maxchars string-len

我在这里看到了一些关于如何将Python列表拆分为块的好文章,如。 大多数帖子处理的是分割块或将列表中的所有字符串连接在一起,然后根据正常的切片例程进行限制

然而,基于角色限制,我需要执行类似的操作。如果您有一个句子列表,但无法截断列表中的任何片段

我可以在这里编写一些代码:

def _splicegen(maxchars, stringlist):
    """
    Return a list of slices to print based on maxchars string-length boundary.
    """
    count = 0  # start at 0
    slices = []  # master list to append slices to.
    tmpslices = []  # tmp list where we append slice numbers.

    for i, each in enumerate(stringlist):
        itemlength = len(each)
        runningcount = count + itemlength
        if runningcount < int(maxchars):
            count = runningcount
            tmpslices.append(i)
        elif runningcount > int(maxchars):
            slices.append(tmpslices)
            tmpslices = []
            count = 0 + itemlength
            tmpslices.append(i)
        if i==len(stringlist)-1:
            slices.append(tmpslices)
    return slices
def\u拼接器(maxchars,stringlist):
"""
基于maxchars字符串长度边界返回要打印的切片列表。
"""
计数=0#从0开始
切片=[]#要将切片附加到的主列表。
tmpslices=[]#tmp列表,我们在其中添加了片编号。
对于i,枚举(stringlist)中的每一个:
itemlength=len(每个)
runningcount=计数+项目长度
如果runningcountint(maxchars):
slices.append(tmpslices)
tmpslices=[]
计数=0+itemlength
tmpslices.append(i)
如果i==len(stringlist)-1:
slices.append(tmpslices)
返回片
输出应返回如下内容: 切片是:[[0,1,2,3,4,5,6],[7,8,9,10,11,12,13],[14,15,16,17,18,19,20]] (每个编号引用stringlist中的一个项目)

因此,当我迭代这个列表时,我可以使用类似“.join”([item for item in each])的东西在一行上打印0,1,2,3,4,5,6,在另一行上打印7,8,9,10,11,12,13。有时,一个列表可能只有两个项目,因为这两个项目都很长(加起来不超过380个字符或其他限制)

我知道代码很糟糕,我应该使用生成器。我只是不知道该怎么做


谢谢。

这只是一行。希望它有用

>>>list=[[1,2], [1]]
>>>sorted(list, key=lambda sublist: len(sublist))
[[1], [1,2]]
此外:


像这样的东西应该有用

def _splicegen(maxchars, stringlist):
    """
    Return a list of slices to print based on maxchars string-length boundary.
    """
    runningcount = 0  # start at 0
    tmpslice = []  # tmp list where we append slice numbers.
    for i, item in enumerate(stringlist):
        runningcount += len(item)
        if runningcount <= int(maxchars):
            tmpslice.append(i)
        else:
            yield tmpslice
            tmpslice = [i]
            runningcount = len(item)
    yield(tmpslice)
def\u拼接器(maxchars,stringlist):
"""
基于maxchars字符串长度边界返回要打印的切片列表。
"""
runningcount=0#从0开始
tmpslice=[]#tmp列表,我们在其中附加切片编号。
对于i,枚举(stringlist)中的项:
runningcount+=len(项目)

如果runningcount是为了将字符串格式化为段落吗?如果是这样的话,也许你可以改为使用?等等,你对stringlist的输入是什么?
“”。join([item for item in each])
只是
“”的一个过于复杂的版本。join(each)
要使它成为一个生成器,你只需要
在任何地方产生tmpslices
,而不是
切片。append(tmpslices)
并丢失
返回切片
我粘贴了一个代码,如下所示:它应该如何输出:./stipleList.py切片是:[[0,1,2,3,4,5],[6,7,8,9,10,11],[12,13,14][0,1,2,3,4,5][6,7,8,9,10,11][12,13,14]是的,它类似于textwrap,但不在字符边界截断?我需要在列表片段到达maxchars编号之前“终止”。上面的一个建议说,这就像一个段落有一个字符限制,但你不能截断项目(它是)。嗨,我刚刚尝试了你的_slicegen,这就成功了。谢谢
def _splicegen(maxchars, stringlist):
    """
    Return a list of slices to print based on maxchars string-length boundary.
    """
    runningcount = 0  # start at 0
    tmpslice = []  # tmp list where we append slice numbers.
    for i, item in enumerate(stringlist):
        runningcount += len(item)
        if runningcount <= int(maxchars):
            tmpslice.append(i)
        else:
            yield tmpslice
            tmpslice = [i]
            runningcount = len(item)
    yield(tmpslice)