2014-11-24 81 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