Iterating over partitions in Python(在 Python 中迭代分区)
问题描述
我想知道(在 Python 中)迭代给定大小列表的分区的最佳方法是什么.
I was wondering what the best way is (in Python) to iterate over partitions of a list of a given size.
例如,我们有列表 [1,2,3,4,5] 并且我们想要 k=3 分区.这样做的一个不好的方法是写:
Say, for example, we have the list [1,2,3,4,5] and we want k=3 partitions. A poor way of doing this would be to write:
lst = [1,2,3,4,5]
for i in range(1,len(lst)):
for j in range(i+1, len(lst)):
print lst[:i], lst[i:j], lst[j:]
这给了
[1], [2], [3,4,5]
[1], [2,3], [4,5]
...
[1,2,3], [4], [5]
但如果我以后想要迭代 k=4 分区,那么我将不得不添加一个级别的 for 循环嵌套,而这在运行时无法完成.理想情况下,我想写这样的东西:
But if I later wanted to iterate over k=4 partitions, then I would have to add a level of for loop nesting, which can't be done at runtime. Ideally, I'd like to write something like:
for part in partitions([1,2,3,4,5], k):
print part
有谁知道最好的方法?
推荐答案
如果没有pairwise,我会使用和你一样的想法:
I would use the same idea as yours without pairwise:
from itertools import combinations
def partitions(items, k):
def split(indices):
i=0
for j in indices:
yield items[i:j]
i = j
yield items[i:]
for indices in combinations(range(1, len(items)), k-1):
yield list(split(indices))
这篇关于在 Python 中迭代分区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 Python 中迭代分区
基础教程推荐
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
