代码生成的data_segment长度仅为预期一半,如何实现与pattern长度匹配?
问题排查与修复
让我们一步步拆解你遇到的两个问题:
1. data_segment长度仅为预期一半的原因
你当前的代码里,每次向data_segment添加的是仅包含2个元素的子列表([v, data_series[i+1]]),而不是和pattern长度一致的4个元素,这直接导致每个子列表的长度是预期的一半。此外,你的循环终止条件if i + length > len(data_series) + 2:逻辑错误,会导致生成多余的无效窗口,进一步偏离预期结果。
2. 无法让pattern长度与data_segment子列表长度匹配的问题
这个问题和第一个问题本质同源:你没有按照pattern的长度(4)来截取data_series的滑动窗口,而是固定截取2个元素,自然无法和长度为4的pattern匹配。
修复后的核心代码(匹配滑动窗口长度)
我们需要调整两个核心点:按pattern长度截取滑动窗口,修正循环终止条件避免越界:
data_segment = [] # 一个空列表 data_series = [-1, 2, -2, 3, 41, 38, 22, 10, -1, 3] pattern = [40, 30, 20, 10] out_list = [] # 用于存储最终输出的空列表 length = len(pattern) # pattern列表的长度 # 循环生成长度与pattern一致的滑动窗口 for i in range(len(data_series) - length + 1): # 截取从i开始、长度为length的连续子序列 window = data_series[i:i+length] data_segment.append(window) print(data_segment)
修复后的输出效果
运行后data_segment的每个子列表长度都会等于pattern的长度(4),输出结果为:
[[-1, 2, -2, 3], [2, -2, 3, 41], [-2, 3, 41, 38], [3, 41, 38, 22], [41, 38, 22, 10], [38, 22, 10, -1], [22, 10, -1, 3]]
额外场景:若需data_segment的元素个数与pattern长度匹配
如果你原本的需求是保留两两配对的子列表,但希望data_segment的总元素个数和pattern长度(4)一致,可以这样调整:
data_segment = [] data_series = [-1, 2, -2, 3, 41, 38, 22, 10, -1, 3] pattern = [40, 30, 20, 10] length = len(pattern) for i in range(length): if i+1 >= len(data_series): break data_segment.append([data_series[i], data_series[i+1]]) print(data_segment)
这段代码会生成4个两两配对的子列表,和pattern的长度完全匹配:
[[-1, 2], [2, -2], [-2, 3], [3, 41]]
内容的提问来源于stack exchange,提问作者crtbk
相关产品推荐
相关产品推荐

