please read question before down voting. not find problem in other questions here. suppose have array, >>> import numpy np >>> array = np.linspace(1,4,4, dtype=np.int) >>> array array([1, 2, 3, 4]) i want function split array in possible parts, such that, no split : ([1,2,3,4]) split in 2 parts : ([1], [2,3,4]) ([1,2], [3,4]) ([1,2,3] ,[4]) split in 3 parts : ([1], [2], [3,4]) ([1,2]), [3], [4]) ([1], [2,3], [4]) split in len(array) parts : ([1],[2],[3],[4]) i know there np.split(array, r) , not give possible splits. e.g. np.split(array, 2) give, [array([0, 1]), array([2, 3])] as can see not need. how achieve need? you use itertools.combinations generate indices split inside loop on number of splits: >>> itertools import combinations >>> [np.split(array, idx) ... n_splits in range(5) ... idx in combinations(range(1, len(array)), n_splits)] [[array([1, 2, 3, 4])], [array([1]), array([2, 3,...