根据more_itertools.windowed规范,您可以做:
list(windowed(seq=[1, 2, 3, 4], n=2, step=1))
>>> [(1, 2), (2, 3), (3, 4)]
但是,如果我想一直运行到最后怎么办?是否可以获取:
>>> [(1, 2), (2, 3), (3, 4), (4, None)]
一种解决方法,但不是最好的解决方案是将None附加到序列中。
list(windowed(seq=[1, 2, 3, 4,None], n=2, step=1))
我相信您可以基于step=
值以编程方式执行此操作,在以下代码中将其称为win_step
。我还删除了硬编码,以使其更容易测试各种sequence_list
,win_width
和win_step
数据集:
sequence_list = [1, 2, 3, 4]
win_width = 2
win_step = 1
none_list = []
for i in range(win_step):
none_list.append(None)
sequence_list.extend(none_list)
tuple_list = list(windowed(seq=sequence_list, n=win_width, step=win_step))
print('tuple_list:', tuple_list)
这是根据您原始问题的数据集以及当前数据集得出的我的结果:
对于原件,其中:
sequence_list = [1, 2, 3, 4, 5, 6]
win_width = 3
win_step = 2
结果是:
tuple_list: [(1, 2, 3), (3, 4, 5), (5, 6, None), (None, None, None)]
对于当前数据集,其中:
sequence_list = [1, 2, 3, 4]
win_width = 2
win_step = 1
结果是:
tuple_list: [(1, 2), (2, 3), (3, 4), (4, None)]