在Python中,基于一组索引将列表拆分为子列表

在Python中,基于一组索引将列表拆分为子列表,python,Python,我有一个类似于下面的列表 ['a','b','c','d','e','f','g','h','i','j'] 我想用索引列表分开 [1,4] 在这种情况下,它将是 [['a'],['b','c'],['d','e','f','g','h','i','j']] 作为 案例2:如果索引列表为 [0,6] 会的 [[],['a','b','c','d','e'],['f','g','h','i','j']] 作为 案例3如果索引为 [2,5,7] 会的 [a'、[b']、[c'、[d'、[

我有一个类似于下面的列表

['a','b','c','d','e','f','g','h','i','j']
我想用索引列表分开

[1,4]
在这种情况下,它将是

[['a'],['b','c'],['d','e','f','g','h','i','j']]
作为

案例2:如果索引列表为

[0,6]
会的

[[],['a','b','c','d','e'],['f','g','h','i','j']]
作为

案例3如果索引为

[2,5,7]
会的 [a'、[b']、[c'、[d'、[e']、[h'、[i'、[j'] 作为

输出:

[[1, 2], [3, 4, 5], [6, 7], [8,9,10]]

大致如下:

mylist = ['a','b','c','d','e','f','g','h','i','j']
myindex = [1,4]

[mylist[s:e] for s, e in zip([0]+myindex, myindex+[None])]
输出

[['a'], ['b', 'c', 'd'], ['e', 'f', 'g', 'h', 'i', 'j']]

我写这个函数是为了满足你的要求

def splitter(_list, *args):
    args_list = [0]
    args_list += args
    args_list.append(len(_list))
    new_list = []
    for i, arg in enumerate(args_list):
        try:
            new_list.append(_list[arg:args_list[i+1]])

        except IndexError:
            continue
    return new_list

该函数可按如下方式使用:

mylist = ['1', '2', '3', '4', '5', '6']
splitter(mylist, 2, 4)
返回:

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

此解决方案正在使用numpy:

import numpy as np

def do_split(lst, slices):
    return [sl.tolist()for sl in np.split(lst, slices)]

splits = do_split(a, [2,5,7])

Out[49]:
[['a', 'b'], ['c', 'd', 'e'], ['f', 'g'], ['h', 'i', 'j']]


如果您的问题是如何获得这些子列表:为什么不使用一个简单的循环?这听起来只有99%像是一个家庭作业。你想用这个实现什么?或者换句话说,家庭作业要你做什么?您已经准备好根据一组索引拆分列表。这是否回答了您的问题?您显示的切片不一致<代码>[0:6]=['a'、'b'、'c'、'd'、'e']应该是
['a'、'b'、'c'、'd'、'e'、'f']
[1:4]=['b'、'c']
应该是
['b'、'c'、'd']
这将比我的方法更快,避免复制,+1!
def splitter(_list, *args):
    args_list = [0]
    args_list += args
    args_list.append(len(_list))
    new_list = []
    for i, arg in enumerate(args_list):
        try:
            new_list.append(_list[arg:args_list[i+1]])

        except IndexError:
            continue
    return new_list

mylist = ['1', '2', '3', '4', '5', '6']
splitter(mylist, 2, 4)
[['1', '2'], ['3', '4'], ['5', '6']]
import numpy as np

def do_split(lst, slices):
    return [sl.tolist()for sl in np.split(lst, slices)]

splits = do_split(a, [2,5,7])

Out[49]:
[['a', 'b'], ['c', 'd', 'e'], ['f', 'g'], ['h', 'i', 'j']]