为什么我的长度只有我想要的一半?

3

我希望模式的长度能够与数据段的长度匹配,但是这个问题出在哪里呢?

data_segment = [] #an empty list

data_series = [-1, 2, -2, 3, 41, 38, 22, 10, -1, 3]
pattern = [40, 30, 20, 10]


out_list = [] #an empty list to contain the final output

length = len(pattern) #length of pattern list


for i, v in enumerate(data_series):
        if i + length > len(data_series) + 2: 
            break

        data_segment.append([v, data_series[i+1]])
print(data_segment)

这打印

[[-1, 2], [2, -2], [-2, 3], [3, 41], [41, 38], [38, 22], [22, 10], [10, -1], [-1, 3]]

但我需要打印它。
[[-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在哪里?这和data_series一样吗? - NBlaine
你正在创建一个包含2个元素的列表。如何将其变成包含4个元素的列表? - Jean-François Fabre
1
抱歉,data_segment是一个新列表。 - crtbk
2
你需要进行切片操作:data_segment.append(data_series[i:i+4]) - Jean-François Fabre
列表为什么只有两个元素?抱歉,我对Python非常陌生。@Jean-FrançoisFabre - crtbk
1个回答

3
您的代码
data_segment.append([v, data_series[i+1]])

正在创建一个由2元素列表组成的列表。这不是您想要的输出结果。
您需要生成一个重叠切片长度与您的模式相同的列表,并进行截断以仅生成精确模式长度的子列表,可以使用列表推导式在一行中完成,而不是使用循环:
data_segment = [data_series[i:i+len(pattern)] for i in range((len(data_series)//4)*4 - 1)]

打印:

[[-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]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接