2017-09-01 371 views
1

嘿,我想知道如果有人知道如何创建一个10列表增加长度的列表。第一个列表应该是空的,即len(mylist[0]) == 0;第二个列表应该有一个元素,所以len(mylist[1]) == 1;等等。我一直在尝试使用extendappendinsert但无济于事创建不断增加的长度python的列表

到目前为止,我已经能够创建10名列表没有元素

def mylists(x):  
    d = [[] for x in range(0,x)] 
    return d 

print (mylists(10) 

任何帮助将不胜感激!

回答

0

试试这个:

super_list = [] 
for i in range(10): 
    super_list.append(list(range(i))) # .append(range(i)) suffices for python2 

您可能需要调整的范围,这取决于你想要的结果。那10次迭代将会给你十名名单,像这样:

[[], 
[0], 
[0, 1], 
[0, 1, 2], 
[0, 1, 2, 3], 
[0, 1, 2, 3, 4], 
[0, 1, 2, 3, 4, 5], 
[0, 1, 2, 3, 4, 5, 6], 
[0, 1, 2, 3, 4, 5, 6, 7], 
[0, 1, 2, 3, 4, 5, 6, 7, 8]] 

如果您仿佛置身于一个更functional的方式做,这将实现同样的结果在Python 2:

map(range, range(10)) 

或者在Python 3:

list(map(lambda i: list(range(i)), range(10))) 
+1

仅适用于python2。 Python3将需要转换为'list'。 –

+2

你不需要lambda。 '地图(范围,范围(10))'工作正常。 – user2357112

+0

好评,谢谢。虽然Python 3仍然需要Lambda,因为它有额外的'list'调用。 – robmathers

1

你可以这样做:

print([[i]*i for i in range(10)]) 
0
>>> [[i for i in range(n)] for n in range(1,8,1)] 
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6]] 

对于使用方法

>>> def test(n): 
...  return [[i for i in range(m)] for m in range(1,n+2,1)] 
... 
>>> 
>>> print test(5) 
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5]]