在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']]