2017-04-21 53 views
-5

我想從列表中創建一個類似列表的結構。除了知道如何解決這個問題之外,我想知道是否有術語來描述這個過程。如何用python創建基於[1,2,3,4,5]的[[1,2],[1,2,3],[1,2,3,4,5]]?

例子:

l = [1,2] 
target = [[1,2]] 

l = [1,2,3] 
target = [[1,2],[1,2,3]] 

l = [1,2,3,4] 
target = [[1,2],[1,2,3,4]] 

l = [1,2,3,4,5] 
target = [[1,2],[1,2,3],[1,2,3,4,5]] 

l = [1,2,3,4,5,6] 
target = [[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5,6]] 

我想找到一種方法來獲得上述結構。

+0

請[編輯],包括你的這個問題的嘗試,並解釋了什麼你實際上是試圖做...你有沒有聽說過名單切片的邏輯是什麼? –

+5

什麼過程?哪些規則會生成該特定輸入的輸出?具有不同尺寸輸入的例子(如果甚至有不同的可能尺寸的輸入)可能會有所幫助。 – jasonharper

+0

同意@jasonharper - 投票結束時不清楚。 – timgeb

回答

1
ls = ["a","b","c"] 
ls2 = [ls[:2],ls[:]] 

如果這是你在找什麼

+0

我已更新我的問題。我想找到一個通用的方法來獲得這個。 – Jack

0

的一般方法:

target = [] 
l = [1, 2, 3] 
for i in range(len(l)): 
    value_list = [] 
    for b in range(i+1): 
     target.append(l[:i+1]) 

print target 

最近編輯:

target = [] 
l = [1, 2, 3] 

for i in range(1, len(l)): 
    value_list = [] 
    for i in range(i+1): 
     value_list.append(l[i]) 
    target.append(value_list) 

print target 
+0

但它在三個以上的元素失敗。 – Jack

+0

固定。請參閱我最近的編輯。 – Ajax1234

0

使用Python3.4:

if len(l)-1 <= 2: 
    t = [l[:2+i] for i in range(len(l)-1)] 
else: 
    t = [l[:2+i] for i in range(len(l)-1)] 
    t.pop(-2) 

print (t) 

根據Stefan Stefanov的回答,我認爲這是我的一般做法。

+0

這對'l = [1,2]'不起作用。 – mkrieger1

+0

它產生的結果與您爲'l = [1,2,3]'指定的結果不同。 – mkrieger1

+0

@ mkrieger1使用'if-else'後,沒關係。 – Jack

0

如何:

def calculate_result(input_list): 
    if input_list == [1,2]: 
     target = [1,2] 

    elif input_list == [1,2,3]: 
     target = [[1,2],[1,2,3]] 

    elif input_list == [1,2,3,4]: 
     target = [[1,2],[1,2,3,4]] 

    elif input_list == [1,2,3,4,5]: 
     target = [[1,2],[1,2,3],[1,2,3,4,5]] 

    elif input_list == [1,2,3,4,5,6]: 
     target = [[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5,6]] 

    else: 
     raise ValueError('Result for {} not specified.'.format(input_list)) 

    return target 
+2

不被重視......:/ – mkrieger1