使用 python 根据另一个列表中的值对列表中的值进行分组来创建列表列表

create lists of lists by grouping values in a list based on values in another list using python

我有一个包含一些值的列表

A=[3,4,5]

我有另一个列表,其中包含一些值,如下所示

B=[11,20,30,40,51,89,50,36,29,90,48,94,45,67,34]

我想创建一个名为 C 的新列表,其中包含子列表,其中每个子列表将根据列表 A 中存在的值创建。列表 A 中的值将作为每个子列表的结束索引。

c=[]
for i in range(len(A)):
    print A[i]
    for x in range(0,len(B),A[i]):
        c.append(B[x:x+A[i]])

但我的问题是它只采用列表 A 的最后一个值并根据它进行分组。我怎样才能确保列表 A 中的所有值都被采用以创建带有子列表的列表 c?

它生成这样的输出

[[11, 20, 30, 40, 51], [89, 50, 36, 29, 90], [48, 94, 45, 67, 34]]

但我需要

[[11, 20, 30, 40], [51], [89]]

我想实现 this.I 想根据列表 A 中存在的值对子列表进行分组,因此 0 将是起始索引,而 3 将是第一个子列表的结束索引,这将是[11,20,30,40] 对于第二个子列表,3 将是起始索引,4 将是结束索引,因此第二个子列表将是 [51],对于第三个子列表,起始索引将是 4,结束索引将是5 所以第三个子列表是 [89]。因此最后我的列表应该是这样的

C=[[11,20,30,40],[51],[89]]

你可以试试这个:

A=[3,4,5]


B=[11,20,30,40,51,89,50,36,29,90,48,94,45,67,34]


new_list = [B[:a+1] if i == 0 else [B[a]] for i, a in enumerate(A)]

您可以尝试以下方法:

A = [3,4,5]
B = [11,20,30,40,51,89,50,36,29,90,48,94,45,67,34]

C = []
for k,v in enumerate(A):
    C.append(B[k:v+1] if k == 0 else B[A[k-1]+1:v+1])

print(C)

输出:

[[11, 20, 30, 40], [51], [89]]