我在这里看到了一些关于如何将 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
输出应返回如下内容:切片为:[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20]] (每个数字引用字符串列表中的一个项目)
所以,当我遍历这个列表列表时,我可以使用类似 "".join([item for item in each]) 的东西在一行上打印 0,1,2,3,4,5,6, 7, 8,9,10,11,12,13 在另一个上。有时,一个列表可能只有 2 个项目,因为这两个项目中的每一个都非常长(加起来会低于 380 个字符或其他字符的限制)。
我知道代码很糟糕,我应该使用生成器。我只是不确定该怎么做。
谢谢。