使用另一个包含Python中长度的列表拆分列表

使用另一个包含Python中长度的列表拆分列表,python,list,split,partition,Python,List,Split,Partition,注意:根据一些人的建议,我将这个问题转发到了网站上 我想使用另一个包含每次拆分长度的列表拆分列表 例如 打印列表(按长度拆分(列表('abcdefg'),[2,1])) ... [a'、[b']、[c']、[d'、[e'、[f'、[g'] >>>打印列表(按长度拆分(列表('abcdefg'),[2,2])) ... [a',b'],[c',d'],[e',f',g'] >>>打印列表(按长度拆分(列表('abcdefg'),[2,2,6])) ... [a',b'],[c',d'],[e',

注意:根据一些人的建议,我将这个问题转发到了网站上


我想使用另一个包含每次拆分长度的列表拆分列表

例如

打印列表(按长度拆分(列表('abcdefg'),[2,1])) ... [a'、[b']、[c']、[d'、[e'、[f'、[g'] >>>打印列表(按长度拆分(列表('abcdefg'),[2,2])) ... [a',b'],[c',d'],[e',f',g'] >>>打印列表(按长度拆分(列表('abcdefg'),[2,2,6])) ... [a',b'],[c',d'],[e',f',g'] >>>打印列表(按长度拆分(列表('abcdefg'),[1,10])) ... [a'],[b''c''d''e''f''g'] >>>打印列表(按长度拆分(列表('abcdefg'),[2,2,6,5])) ... [a',b'],[c',d'],[e',f',g'] 正如您所注意到的,如果长度列表没有覆盖所有列表,我会将其余元素作为附加子列表追加。另外,我希望避免在长度列表生成更多列表中要拆分的元素的情况下在末尾出现空列表

我已经有了一个我想要的功能:

def take(n,iterable):
“将iterable的前n项作为列表返回”
返回列表(islice(iterable,n))
def按长度分割(列表,镜头):
li=国际热核实验堆(列表)
对于镜头中的l:
元素=取(l,li)
如果不是元素:
打破
屈服要素
其他:
剩余=列表(li)
如果剩余:
剩余产量
但是我想知道是否有一种更像python的方法来编写这样的函数

注意:我从以下位置获取了
take(n,iterable)
from:

您可以使用:

演示:

>>> list(split_by_lengths(list('abcdefg'), [2,1]))
[['a', 'b'], ['c'], ['d', 'e', 'f', 'g']]
>>> list(split_by_lengths(list('abcdefg'), [2,2]))
[['a', 'b'], ['c', 'd'], ['e', 'f', 'g']]
>>> list(split_by_lengths(list('abcdefg'), [2,2,6]))
[['a', 'b'], ['c', 'd'], ['e', 'f', 'g']]
>>> print list(split_by_lengths(list('abcdefg'), [1,10]))
[['a'], ['b', 'c', 'd', 'e', 'f', 'g']]
上述版本的较短版本,但请注意,与第一个答案不同,迭代器耗尽后,这不会立即缩短curcuit

def split_by_lengths(seq, num):
    it = iter(seq)
    out =  [x for x in (list(islice(it, n)) for n in num) if x]
    remain = list(it)
    return out if not remain else out + [remain]
您可以使用以下方法执行此操作:

演示:

>>> list(split_by_lengths(list('abcdefg'), [2,1]))
[['a', 'b'], ['c'], ['d', 'e', 'f', 'g']]
>>> list(split_by_lengths(list('abcdefg'), [2,2]))
[['a', 'b'], ['c', 'd'], ['e', 'f', 'g']]
>>> list(split_by_lengths(list('abcdefg'), [2,2,6]))
[['a', 'b'], ['c', 'd'], ['e', 'f', 'g']]
>>> print list(split_by_lengths(list('abcdefg'), [1,10]))
[['a'], ['b', 'c', 'd', 'e', 'f', 'g']]
上述版本的较短版本,但请注意,与第一个答案不同,迭代器耗尽后,这不会立即缩短curcuit

def split_by_lengths(seq, num):
    it = iter(seq)
    out =  [x for x in (list(islice(it, n)) for n in num) if x]
    remain = list(it)
    return out if not remain else out + [remain]

这个问题似乎离题了,因为它属于我不知道的codereview.stackexchange.com,但我不认为这个问题不适合stackoferflow。但是,如果你认为这个问题属于codereview,我可以在那里转发。如果你转发,请在这里留下一条评论,并附上链接,这样我就可以提交我的答案。转发这个问题似乎是离题的,因为它属于我不知道的codereview.stackexchange.com,但我不认为这个问题不适合stackoferflow。但是,如果您认为这个问题属于codereview,我可以在那里重新发布。如果您重新发布,请在此处留下一条带有链接的注释,这样我就可以提交我的答案。重新发布这是一个不错的答案,但如果长度列表包含的元素多于要拆分的序列,则会生成空列表,例如:
打印列表(按长度拆分(list('abcdefg'),[2,2,6,5])
产生
[[a']、['b',c']、['d',e',f',g']、[]
我希望避免其结尾的空列表。我将编辑我的问题以包含此案例。@VGonPa我认为输出应该是
[[a',b'],['c',d'],['e','f',…
@VGonPa反正我已经更新了解决方案。是的,你是对的,复制粘贴时是一个错误:
打印列表(按长度拆分(列表('abcdefg'),[2,2,6,5])
生成
['a','b',['c','d',['e','f','g',[]
在您的code@VGonPa请尝试更新的代码。这是一个很好的答案,但如果长度列表包含的元素多于要拆分的序列,则会生成空列表,例如:
print list(按长度拆分(list('abcdefg'),[2,2,6,5])
生成
[['a'],['b','c'],['d','E','f','g'],[]
我想避免其结尾的空列表。我将编辑我的问题以包含此案例。@VGonPa我认为输出应该是
[['a',b',['c',d',['e','f',…
@VGonPa反正我已经更新了解决方案。是的,你是对的,复制粘贴时出错:
打印列表(按长度拆分(列表('abcdefg'),[2,2,6,5]))
在您的应用程序中生成
[[a'、[b']、[c'、[d']、[e'、[f'、[g']、[]]
code@VGonPa请尝试更新的代码。