从列表创建新列表,其中每个列表缩短1个元素

时间:2017-10-25 16:55:47

标签: python-3.x

我有一个列表[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 ....],但不分解成单独的清单。

2 个答案:

答案 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)]

但像你一样使用的明确功能就好了。

相关问题