2017-06-13 52 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