我有一个列表[1,2,3,4,5,6,7,8],我想把它分成多个列表,如: [[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7],[1,2,3,4,5,6] ..
def breakdown(a):
x = []
y = []
q = len(a)
while q > 0:
y += [a]
a.pop()
q -= 1
print(y)
上面的代码返回空列表,如果我从y + = [a]中删除括号,我会得到一个正确元素的列表([1,2,3,4,5,6,7] ,8,1,2,3,4,5,6,7,1,2,3,4,5,6 ....],但不分解成单独的清单。
答案 0 :(得分:1)
您可以使用列表推导
>>> a = [list(range(1,i+1)) for i in range(8,0,-1)]
>>> a
[[1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3], [1, 2], [1]]
编辑:我的不好,我理解错误的问题。您可以使用切片技术来解决它
def breakdown(li):
result = []
for i in range(len(li)-1, -1, -1):
result.append(li[:i+1])
return result
a = [3, 7, 1, 5, 4, 2, 8, 6]
my_lists = breakdown(a)
print(my_lists)
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
my_lists = breakdown(a)
print(my_lists)
答案 1 :(得分:1)
您的直接问题是y += [a]
扩展 y
(它实际上创建了一个新列表,但在概念上它扩展了y
)当您想将附加到y
。我们可以简单地修改您的代码:
def breakdown(a):
y = []
q = len(a)
while q > 0:
y += [list(a)]
a.pop()
q -= 1
return y
my_list = [1, 2, 3, 4, 5, 6, 7, 8]
my_lists = breakdown(my_list)
print(my_lists)
输出
% python3 test.py
[[1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2, 3], [1, 2], [1]]
%
但更简洁的方法可能是直接使用.append()
:
def breakdown(a):
y = []
q = len(a)
while q > 0:
y.append(a[0:q])
q -= 1
return y
当然,我们可以将其转换为强制性列表理解:
my_lists = [my_list[0:i] for i in range(len(my_list), 0, -1)]
但像你一样使用的明确功能就好了。