在尝试用Python实现惰性分区时感觉很愚蠢

2024-04-18 16:12:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现迭代器对象的延迟分区,当迭代器的某个元素上的函数更改值时,该对象将生成迭代器的切片。这将模仿Clojure分区的行为(尽管输出的语义不同,因为Python将真正“消费”元素)。我的实现在它执行的操作数量上是最优的,但在它所需的内存中不是最佳的。我不明白为什么一个好的实现需要多于O(1)的内存,但是我的实现占用了O(k)内存,其中k是分区的大小。我希望能处理k值很大的情况。有人知道一个好的实现吗?在

正确的行为应该是

>>>unagi = [-1, 3, 4, 7, -2, 1, -3, -5]
>>> parts = partitionby(lambda x: x < 0,unagi)
>>> print [[y for y in x] for x in parts]
[[-1], [3, 4, 7], [-2], [1], [-3, -5]]

这是我现在的版本

^{pr2}$

Tags: 对象函数内存in元素for数量语义
2条回答

为什么不reuse ^{}?我想是O(1)。在

def partitionby(f, iterable):
    return (g[1] for g in groupby(iterable, f))

groupby的实现与您的不同之处在于partition是一个专门的迭代器对象,而不是{}的{}的{}。。。在

它困扰着我,partition可能是一个普通列表,而不是迭代器,即:

partition = iter([current])
partition = chain(partition,iter([justseen]))
partition = iter([])

可能是:

^{pr2}$

相关问题 更多 >