2014-11-24 137 views
1

假設的子名單我有一個列表,拆分列表爲減少大小

list = [0,1,2,3] 

我怎麼會名單分成類似

new_list = [[0,1,2,3],[1,2,3],[2,3],[3]] 

我已經嘗試使用:

def change(list): 
    new_list = [] 
    for i in range(len(list)): 
     total += [list:] 
    return new_list 

但我得到的返回值爲

new_list = [0,1,2,3,1,2,3,2,3,3] 

幫助將不勝感激, 謝謝。

+0

'總+ = [列表:]'是一個語法錯誤。 – interjay 2014-11-24 09:56:21

回答

4

使用一個簡單的列表理解,它遍歷原始列表的長度。另外,我使用變量名lst,因爲list是一個python類型。

在這裏你去:

>>> lst = [0,1,2,3] 
>>> [lst[i:] for i in range(len(lst))] 
[[0, 1, 2, 3], [1, 2, 3], [2, 3], [3]] 
+1

比我快。 – Maroun 2014-11-24 09:55:20

+1

謝謝一堆!在被卡住之後,我終於完成了我的項目。 – user2958444 2014-11-24 10:14:03

0
newlist=[] 
list = [0,1,2,3] 
i=0 
while i<len(list): 
    newlist.append(list[i:]) 
    i=i+1 

print newlist 
+0

'for'循環比這個'while'更加Pythonic。並且一個列表理解比'for' +'append'更Pythonic。 – interjay 2014-11-24 10:09:12

0

您還可以使用maplambda

In [14]: map(lambda x: list[x:], xrange(len(list))) 
Out[14]: [[0, 1, 2, 3], [1, 2, 3], [2, 3], [3]] 
+0

這似乎工作,因爲'列表'是'[0,1,2,3]'。它不適用於其他列表。 – interjay 2014-11-24 10:03:18

+0

@interjay我更新了代碼,請檢查 – 2014-11-24 10:06:03

+0

現在它是正確的,但它與畝的答案基本相同,只是使用較少的Pythonic地圖+ lambda代替列表理解。 – interjay 2014-11-24 10:07:48