根据项目的长度将python列表分块
我在这里看到了一些关于如何将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
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)