通过使用python基于另一个列表中的值对列表中的值进行分组来创建列表列表

时间:2017-06-13 20:57:04

标签: python for-loop indexing grouping sublist

我的列表中有一些值

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

我想实现这一点。我想根据列表A中的值对子列表进行分组,因此0将是起始索引,3将是第一个子列表的结束索引[11,20]第二个子列表3将是起始索引,第4个子列表将是结束索引,因此第二个子列表将是[51],对于第三个子列表,起始索引将是4,结束索引将是5,因此第三个子列表会[89]。最后我的名单应该是这样的

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

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

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

答案 1 :(得分:0)

你可以试试这个:

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)]