【问题标题】:Create new lists from list where each list is 1 element shorter从列表创建新列表,其中每个列表短 1 个元素
【发布时间】:2017-10-25 16:55:47
【问题描述】:

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

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    当你想追加y += [a]时,你的直接问题是y(它实际上创建了一个新列表,但在概念上它扩展了yy。我们可以简单地修补您的代码:

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

    但是像您使用的显式函数就可以了。

    【讨论】:

    • 我一直在努力提高我的列表理解能力,所以我很高兴你把它包括在内。十分感谢你的帮助。我知道我犯了一个愚蠢的错误。
    【解决方案2】:

    您可以使用列表推导

    >>> 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)
    

    【讨论】:

    • OP 说他们有一个列表,而不是一个数字。如果示例列表是 ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 或 [3, 7 , 1, 5, 4, 2, 8, 6] 但你的答案不是。您对数据的假设可能是正确的,但这显然是一个(未说明的)假设。
    • 我的坏@cdlane 现在改变它
    猜你喜欢
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多