我们说我有一个清单:
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]]]]]]
答案 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])