如何在python中动态获取列表的切片子列表?

时间:2014-03-12 22:32:50

标签: python list

我们说我有一个清单:

l = [0,1,2,3,4]

我想在这个逻辑中获得一系列列表:

[[1,2,3,4],[0,1,2,3],[2,3,4],[1,2,3],[0,1,2],[3,4],[2,3],[1,2],[0,1],[0],[1],[2],[3],[4]]

l[1:]l[:-1]制作的子列表

我从这个递归函数开始:

l = [0,1,2,3,4]

def sublist(l):

    if len(l) == 1:
        return l
    else:
        return [sublist(l[1:]),sublist(l[:-1])]

a = [sublist(l)]

print a

但它并不是我输出的内容:

[[[[[[4], [3]], [[3], [2]]], [[[3], [2]], [[2], [1]]]], [[[[3], [2]], [[2], [1]]], [[[2], [1]], [[1], [0]]]]]]

4 个答案:

答案 0 :(得分:4)

import itertools
[list(itertools.combinations(l, x)) for x in range(1, len(l))]

答案 1 :(得分:1)

[l[x:] for x in range(len(l))] + [l[:x+1] for x in range(len(l))]

循环l两次,但无论我的想法如何(可以使用zip但同样的事情)。

答案 2 :(得分:1)

这是一个非常简单的实现:

def sublists_n(l, n):
    subs = []
    for i in range(len(l)-n+1):
        subs.extend([l[i:i+n]])
    return subs

def sublists(l):
    subs = []
    for i in range(len(l)-1,0,-1):
        subs.extend(sublists_n(l,i))
    return subs

>>> l = [0,1,2,3,4]
>>> sublists(l)
[[0, 1, 2, 3], [1, 2, 3, 4], [0, 1, 2], [1, 2, 3], [2, 3, 4], [0, 1], [1, 2], [2, 3], [3, 4], [0], [1], [2], [3], [4]]

答案 3 :(得分:1)

一个简单的递归,并没有正确地排序,但很简单。

def sublists(l):
    right = l[1:]
    left = l[:-1]
    result = [right, left]
    if len(l) > 2:
        result.extend(sublists(right))
        result.extend(sublists(left))
    return result

print sublists([0,1,2,3,4])