对于Python列表:
l = list('ABCDEFG')
如何将其转换为一个连续的 N 元组的列表,而不丢弃边缘情况?下面是一个 N=3 的例子:
A
A B
A B C
B C D
C D E
D E F
E F G
F G
G
我可以接近
for first, second, third in zip(l,l[1:],l[2:]):
print(first, second, third)
我可以用一个看起来像C语言的for
循环来修补它,检查数组绑定的有效性,但它很快就变成了一个嵌套的if
语句的网络,我正在寻找一个更像Python的解决方案。
5条答案
按热度按时间juud5qan1#
使用一个简单的列表理解:
这在给定序列
seq
上创建了一个大小为n
的滑动窗口,但在序列开始之前启动n - 1
。max(i, 0)
的目的是禁止负索引,以便每个切片都是非空的。示例输出:
pxy2qtax2#
你可以写一个生成器函数,它首先在 steps 中从字符串中 * 产生 * 项,然后从
itertools.zip_longest
对象中 * 产生 *:drnojrws3#
您可以使用3个列表解析来生成边缘情况和N元组,然后只需连接列表:
d4so4syb4#
你可以试试这个:
aamkag615#
我问了ChatGPT,这个答案对我很管用