我过去一直在寻找如何做到这一点,但似乎找不到任何能回答我问题的东西,或者它的想法和代码太复杂了,我作为一个完全的初学者无法理解。所以基本上这就是我必须做的任务:
编写一个函数all-sublists(lst(,对于列表lst,它作为结果返回lst的所有子列表的列表。子列表是包含连续部分的列表即包括来自原始。
例如,对于列表[1,2,3],结果应该是
[[], [1], [2], [3], [1, 2], [2, 3], [1, 2, 3]]
我开始做的是创建一个包含所有数字的完整列表,然后对其进行拆分。然而,我不能使用split函数,因为它是一个字符串,也不知道如何正确拼接。
使用itertools.combinations
from itertools import combinations
l = [1, 2, 3]
final = []
for i in range(len(l)+1):
final += list(combinations(l,i))
print(final)
[((,(1,(,(2,(
这里有一个函数,可以使用双循环找到您想要的结果。
def get_contiguous_sublists(lst):
out = [[]]
# find the length of the input list (added 1 for convenience which will be useful later)
len_lst = len(lst) + 1
# for each integer between 1 and the full length of the input list,
# we slice the input list `lst` to create new lists of this length
# and add it to the output list `out`
for length in range(1, len_lst):
# here, we are changing the starting point of the list slicing,
# i.e. whether we want to start from 1 or 2 or 3 for [1,2,3]
for i in range(len_lst - length):
out += [lst[i : i + length]]
return out
输出:
>>> get_contiguous_sublists([1,2,3])
[[], [1], [2], [3], [1, 2], [2, 3], [1, 2, 3]]
>>> get_contiguous_sublists([1,2,3,4])
[[], [1], [2], [3], [4], [1, 2], [2, 3], [3, 4], [1, 2, 3], [2, 3, 4], [1, 2, 3, 4]]