如何在 Python 中对列表进行参差不齐的分区?

How to ragged partition a list in Python?

是否有内置的 Python 函数使得 with

vals=[1,2,3,4,5]

然后foo(vals,2)给出

[[1,2],[3,4],[5]]

我正在寻找 Wolfram 语言通过

提供的行为
Partition[Range@5, UpTo@2]
{{1, 2}, {3, 4}, {5}}

您可以将列表理解与列表索引/切片结合使用:

vals = [1,2,3,4,5]

def foo(v, j=2):
    return [v[i:i+j] for i in range(0, len(v), j)]

print(foo(vals, 2))

[[1, 2], [3, 4], [5]]

print(foo(vals, 3))

[[1, 2, 3], [4, 5]]

试试这个:'n' 是子组大小。 'l' 是列表

def groups(l, n):
    for i in range(0, len(l), n):
        yield l[i:i + n]

这既不内置于 Python 语言本身,也不内置于它的标准库中,但可能是您正在寻找的功能方面的:

安装第三方库more-itertools(不要与itertools模块混淆,后者部分Python 标准库),例如与

pipenv install 'more-itertools >= 2.4'

然后就可以使用它提供的function sliced()

from more_itertools import sliced

vals = [1,2,3,4,5]
slices = list(sliced(vals, 2))

print(slices)

结果:

[[1, 2], [3, 4], [5]]

如果 iterable 不可切片,您可以使用 chunked() from the same library 而不是切片。