如何在Python中破坏分区列表?

时间:2018-04-29 12:31:23

标签: python python-3.x list wolfram-mathematica partition

是否有内置的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}}

3 个答案:

答案 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]