如何首先根据初始列表的单个元素将列表拆分为子列表,然后简单地在 python 中将列表的连续部分拆分为子列表?
How to split a list into sublists based on single elements of the initial list first and then contiguous portions of the list simply in python?
我过去一直在寻找如何做到这一点,但似乎找不到任何能解决我的问题的东西,或者它的想法和代码太复杂了,我作为一个完全的初学者无法理解。所以基本上这是我必须做的任务:
写一个函数 all sublists(lst) 对于列表 lst returns 作为其结果 a
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,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
这是一个使用双循环找到您想要的结果的函数。
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]]
我过去一直在寻找如何做到这一点,但似乎找不到任何能解决我的问题的东西,或者它的想法和代码太复杂了,我作为一个完全的初学者无法理解。所以基本上这是我必须做的任务:
写一个函数 all sublists(lst) 对于列表 lst returns 作为其结果 a 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,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
这是一个使用双循环找到您想要的结果的函数。
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]]