如何在 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 而不是切片。
是否有内置的 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 而不是切片。