如何从单个原始列表生成多个带交集的子列表?求切片/循环实现方法
生成带交集的滑动子列表实现方案
嘿,这个需求本质上就是根据指定窗口大小(由list_b的长度确定)生成滑动窗口子列表,每个相邻子列表之间保留交集。我给你两种实用的实现方式:
方法一:for循环+切片操作
先确定窗口大小为list_b的长度,然后通过循环遍历起始索引,每次用切片截取对应长度的子列表,添加到结果列表中即可:
list_a = [5, 2, 30, 6, 17] list_b = [40, 90] # 获取窗口大小 window_size = len(list_b) result = [] # 循环的起始索引范围是0到 len(list_a)-window_size(包含) for i in range(len(list_a) - window_size + 1): # 切片截取从i开始的window_size个元素 sub_list = list_a[i:i+window_size] result.append(sub_list) print(result) # 输出: [[5, 2], [2, 30], [30, 6], [6, 17]]
方法二:列表推导式(更简洁)
如果想让代码更紧凑,可以用Python的列表推导式一步完成,逻辑和上面的循环完全一致:
list_a = [5, 2, 30, 6, 17] list_b = [40, 90] window_size = len(list_b) # 一行代码生成结果 result = [list_a[i:i+window_size] for i in range(len(list_a) - window_size + 1)] print(result) # 输出同样符合需求
补充说明
这里的关键是循环的索引范围:range(len(list_a) - window_size + 1)。因为当起始索引为len(list_a)-window_size时,切片list_a[i:i+window_size]刚好能取到list_a的最后window_size个元素,不会出现索引越界的问题,同时保证了所有相邻子列表都有window_size-1个元素的交集,完全匹配你要的效果。
内容的提问来源于stack exchange,提问作者crtbk
相关产品推荐
相关产品推荐

