2017-06-13 51 views
-1

在另一个列表中的值列表中的分组值创建列表的列表我有我已经如下所示通过基于使用python

B=[11,20,30,40,51,89,50,36,29,90,48,94,45,67,34] 
具有一定值的另一个列表,其具有一些值

A=[3,4,5] 

列表

我想创建一个名为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想基于当前列表中的某个值组子列表,所以0将是起始索引,三个将是第一个子列表的结束索引[11,20,30,40],第二个子列表3将是起始索引,并且4将是结束索引,因此第二个子列表会是[51],对于第三个子列表,起始索引将是4,结束索引将是5秒Ø第三子表会[89] .Hence终于我的名单应该是这样的

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

我缩进你的第二个循环t o实际上利用了'我'。我的输出与你的不匹配:'[[11,20,30],[40,51,89],[50,36,29],[90,48,94],[45,67,34] .. 。]' –

+0

我f我正确理解你,根据你的要求,不应该被期望列表是3,4,5元素而不是4,5,6元素的组? –

+0

A = [3,4,5]这个列表代表了结束索引,我们应该用它来构造子列表 – user1681102

回答

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

非常感谢!!这就是我正在寻找的。如果我的列表B是[11,20,30,40,“结束”,51,“结束”,89,“结束”,50,36,29,90,48,94,45,67,34],该怎么办?我想删除那些结束字符串,但仍应该得到相同的输出? – user1681102

+0

@ user1681102,过滤掉“结束”字符串'B = [v for v in v isinstance(v,int)]' – RomanPerekhrest

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

请忽略我的上述问题。我想要实现这一点。我想根据列表A中的值对子列表进行分组,因此0将是起始索引,3将是第一个子列表的结束索引,它将是[11,20,30, 40],第二个子列表3是起始索引,4是结束索引,因此第二个子列表将是[51],对于第三个子列表,起始索引将是4,结束索引将是5,因此第三个子列表将是[ 89]。因此,最后我的清单应该看起来像这样C = [[11,20,30,40],[51],[89]] – user1681102