如何将python windowed()迭代到最后一个元素?

问题描述 投票:0回答:2

根据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)]
python-3.x
2个回答
0
投票

一种解决方法,但不是最好的解决方案是将None附加到序列中。

list(windowed(seq=[1, 2, 3, 4,None], n=2, step=1))

0
投票

我相信您可以基于step=值以编程方式执行此操作,在以下代码中将其称为win_step。我还删除了硬编码,以使其更容易测试各种sequence_listwin_widthwin_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)]
© www.soinside.com 2019 - 2024. All rights reserved.