Python:ListA滑动窗口递增序列与静态ListB的组合生成问题
解决方案
核心思路
先生成ListA的所有连续递增滑动窗口子序列(即长度从1到ListA总长度的连续元素组),再将每个子序列与ListB的元素做笛卡尔积组合。
代码实现
import itertools def generate_sliding_combinations(list_a, list_b): # 生成ListA的所有连续子序列 sliding_subsequences = [] n = len(list_a) # 遍历子序列长度:1到n for length in range(1, n+1): # 遍历起始索引,确保子序列不越界 for start in range(n - length + 1): subsequence = list_a[start:start+length] sliding_subsequences.append(subsequence) # 将每个子序列与ListB元素做笛卡尔积 result = list(itertools.product(sliding_subsequences, list_b)) return result # 测试示例 ListA = ["Val1", "Val2", "Val3"] ListB = [0, 1] output = generate_sliding_combinations(ListA, ListB) for item in output: print(item)
输出结果
运行后会得到你需要的所有组合:
(['Val1'], 0)
(['Val1'], 1)
(['Val2'], 0)
(['Val2'], 1)
(['Val3'], 0)
(['Val3'], 1)
(['Val1', 'Val2'], 0)
(['Val1', 'Val2'], 1)
(['Val2', 'Val3'], 0)
(['Val2', 'Val3'], 1)
(['Val1', 'Val2', 'Val3'], 0)
(['Val1', 'Val2', 'Val3'], 1)
为什么之前的方法不行?
itertools.combinations是从ListA中选取任意位置的元素组合(比如会出现('Val1','Val3')这种非连续的组合),不符合你需要的**递增滑动窗口(连续元素)**要求。- 单独用
itertools.product只能处理两个列表的直接笛卡尔积,没法先筛选出ListA的连续子序列。
内容的提问来源于stack exchange,提问作者so_usr_fivemillion
相关产品推荐
相关产品推荐

