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

2024-09-30 01:19:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里看到了一些关于如何将Python列表拆分为how to split an iterable in constant-size chunks这样的块的文章。 大多数帖子处理的是划分块或将列表中的所有字符串连接在一起,然后根据常规的切片例程进行限制。在

然而,我需要在角色限制的基础上执行类似的操作。如果你有一个句子列表,但不能截断列表中的任何片段。在

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

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

输出应返回如下内容: 切片为:[[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。有时,一个列表可能只有2个条目,因为这两个条目都很长(总计不超过380个字符或其他字符)。在

我知道这是一个很糟糕的代码生成器。我只是不知道该怎么做。在

谢谢。在


Tags: toin列表forcount切片listeach
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)

另请参见textwrap模块

这只是一句话。希望它有用

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

同时:

^{pr2}$

相关问题 更多 >

    热门问题