python-3.x - 以循环方式生成列表的子集
问题描述
x = [1,2,3,4,5,6,7]
.
y = 3
. 认为y<=len(x)
如何从x
长度生成子集,y
例如
[1,2,3], [4,5,6], [7,1,2], [3,4,5], [6,7,1] ....
假设第一个子集是x[:3]
,我如何继续生成其余子集?
编辑 1:我的解决方案基于@Jordan 的回答
xs = [1,2,3,4,5,6,7]
y = 3
sublist = None
def cycles(xs, y, prev):
start = 0 if prev[-1]==xs[-1] else (xs.index(prev[-1])+1)
sublist = [xs[i % len(xs)] for i in range(start, start + y)]
start = (start + y) % len(xs)
return sublist
for _ in range(10):
if sublist == None:
prev = xs[0:y]
prev = cycles(xs, y, prev)
print("first")
sublist = prev
else:
prev = cycles(xs, y, prev)
print(prev)
解决方案
您可以使用生成器继续生成它们。一种可能的解决方案(也适用于y > len(x)
):
def cycles(xs, y):
start = 0
while True:
sublist = [xs[i % len(xs)] for i in range(start, start + y)]
start = (start + y) % len(xs)
yield sublist
推荐阅读
- javascript - 如何防止由于 NextJS 上的参数而导致额外的重新渲染?
- domain-driven-design - DDD - 与第三方系统集成时如何确保聚合一致性?
- mysql - 如何使用 Join 和 count 解决 mysql 中的此错误?
- javascript - 如何使用 javascript 获得顶级样式值?
- r - R不会将表格列解释为数值
- c - 在像 touch.c 这样的 FreeBSD 代码中,以美元符号作为第一个和最后一个字符的 RCSID 是什么意思?
- arrays - 有什么更好的做法?多个 IMPORTRANGE 公式还是一个 IMPORTRANGE + 多个本地 VLOOKUP 公式?
- android - Android - 不要显示每种类型的 DialogFragment 超过 1 个
- css - 为什么 CSS Grid 项目不在最大列的新行上开始?
- node.js - 无法在“GetModelService”构造函数的位置 #0 注入依赖项“modelRepository”。原因:无法读取未定义的属性“名称”