Python 按特定值拆分列表

Python 按特定值拆分列表,python,python-3.x,list,Python,Python 3.x,List,我试图编写一个代码,当某个值是列表的中间元素时,将一类列表中的列表一分为二,然后生成两个列表,其中中间元素成为第一个列表中的结束元素,第二个列表中的第一个元素 列表中可以有n个以上的中间元素,因此结果必须是n+1个列表 例如: A = [[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[16,17,18,19,20,21,22,23,24,25],[26,27,28,29]] P = [4,7,13,20] n = len(Points) # in this c

我试图编写一个代码,当某个值是列表的中间元素时,将一类列表中的列表一分为二,然后生成两个列表,其中中间元素成为第一个列表中的结束元素,第二个列表中的第一个元素

列表中可以有n个以上的中间元素,因此结果必须是n+1个列表

例如:

A = [[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[16,17,18,19,20,21,22,23,24,25],[26,27,28,29]]

P = [4,7,13,20]
n = len(Points) # in this case n = 4
我正在寻找这样一个结果:

A = [[0,1,2,3,4],[4,5,6,7],[7,8,9,10,11,12,13],[13,14,15],[16,17,18,19,20],[20,21,22,23,24,25],[26,27,28,29]]
因为n=4,它将产生5个列表,请注意,答案有6个列表,因为最后一个列表没有p in的任何值,因此保持不变

我还不能产生任何东西,因为我是python新手,很难描述这个问题


感谢您的帮助

您可以继续将子列表项追加到输出列表的最后一个子列表中,如果当前项与点中的下一项相等,则将新的子列表追加到具有相同项的输出中,并从点中弹出该项:

通过示例输入,输出将变成:

[[0, 1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10, 11, 12, 13], [13, 14, 15], [16, 17, 18, 19, 20], [20, 21, 22, 23, 24, 25], [26, 27, 28, 29]]

您可以首先恢复所提供值的所有索引,然后进行相应的切片

密码 实例 输出 然后,您可以迭代地将此应用于输入列表A以获得所需的结果。或者,您可以使用itertools.chain.from_iterable

输出
到目前为止,您尝试了什么?您的示例代码甚至不是有效的Python语法,也没有命名变量列表。虽然它与列表不冲突,但它非常接近,足以让人困惑,而且您不应该对内置项进行阴影处理?我想不出一个关于n的定义会导致总是有n+1个列表。如果你用谷歌搜索短语列表切片,你会找到比我们在这里的答案更好的解释它的教程。
[[0, 1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10, 11, 12, 13], [13, 14, 15], [16, 17, 18, 19, 20], [20, 21, 22, 23, 24, 25], [26, 27, 28, 29]]
def split_at_values(lst, values):
    indices = [i for i, x in enumerate(lst) if x in values]
    for start, end in zip([0, *indices], [*indices, len(lst)]):
        yield lst[start:end+1]
values =  {4, 7, 13, 20}
lst = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

print(*split_at_values(lst, values))
[0, 1, 2, 3, 4] [4, 5, 6, 7] [7, 8, 9, 10, 11, 12, 13] [13, 14, 15]
from itertools import chain

values = {4, 7, 13, 20}
lst_A = [[0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
         [16, 17, 18, 19, 20, 21, 22, 23, 24, 25],
         [26, 27, 28, 29]]

output = list(chain.from_iterable(split_at_values(sublst, values) for sublst in lst_A))

print(output)
[[0, 1, 2, 3, 4],
 [4, 5, 6, 7],
 [7, 8, 9, 10, 11, 12, 13],
 [13, 14, 15],
 [16, 17, 18, 19, 20],
 [20, 21, 22, 23, 24, 25],
 [26, 27, 28, 29]]