首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表上的环绕运行窗口

列表上的环绕运行窗口
EN

Stack Overflow用户
提问于 2019-02-20 06:02:54
回答 1查看 91关注 0票数 1

我希望使用“滑动窗口”将列表拆分成相同大小的块,但不是截断列表的末尾,而是绕回,以便最后的块可以分布在列表的开头和结尾。

例如,给定一个列表:

代码语言:javascript
复制
l = [1, 2, 3, 4, 5, 6]

我希望生成大小为n=3的块,如下所示:

代码语言:javascript
复制
[1, 2, 3], [4, 5, 6]
[2, 3, 4], [5, 6, 1]
[3, 4, 5], [6, 1, 2]

或者,包含大小为n=2的块的相同列表应按如下方式拆分:

代码语言:javascript
复制
[1, 2], [3, 4], [5, 6]
[2, 3], [4, 5], [6, 1]

该列表可以不被均匀地划分为n个子列表(例如,如果原始列表具有长度7和n=3 -或者除7或1之外的任何值)。与通常情况下一样,四舍五入的值len(l) / n可用于确定分割大小。

This post是相关的,尽管它不会像我需要的那样进行包装。我已经尝试过了,但没有管理任何有用的东西。任何建议都将非常受欢迎!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 06:21:39

您可以在从itertools.cycle生成的环绕迭代器上使用itertools.islice

代码语言:javascript
复制
from itertools import cycle, islice
def rolling_chunks(l, n):
    return ([list(islice(cycle(l), i + j, i + j + n)) for j in range(0, len(l), n)] for i in range(n))

因此list(rolling_chunks(l, 3))返回:

代码语言:javascript
复制
[[[1, 2, 3], [4, 5, 6]], [[2, 3, 4], [5, 6, 1]], [[3, 4, 5], [6, 1, 2]]]

并且该list(rolling_chunks(l, 2))返回:

代码语言:javascript
复制
[[[1, 2], [3, 4], [5, 6]], [[2, 3], [4, 5], [6, 1]]]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54775629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档