是否有内置的Python函数,使用
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}}
答案 0 :(得分:3)
您可以将列表推导与列表索引/切片一起使用:
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]]
答案 1 :(得分:2)
这既不是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]]
如果可迭代不可切片,您可以使用chunked()
from the same library代替切片。
答案 2 :(得分:1)
试试这个:' n'是子组大小。 '升'是列表
def groups(l, n):
for i in range(0, len(l), n):
yield l[i:i + n]