当iterable包含数百万个元素时,是否有zip* iterable的替代方法?

问题描述

我遇到过这样的代码:

from random import randint

class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y

points = [Point(randint(1,10),randint(1,10)) for _ in range(10)]
xs = [point.x for point in points]
ys = [point.y for point in points]

我认为这段代码是 not Pythonic的,因为它可以重复。如果将另一个维度添加到Point类中,则需要编写一个全新的循环:

zs = [point.z for point in points]

因此,我尝试通过编写如下代码使其更具有Pythonic:

xs,ys = zip(*[(point.x,point.y) for point in p])

如果添加了新尺寸,则没问题:

xs,ys,zs = zip(*[(point.x,point.y,point.z) for point in p])

尽管只有一个循环,但在有数百万个点时,这几乎比另一种解决方案十倍。我认为这是因为*运算符需要将数百万个参数解压缩到zip函数中,这很可怕。所以我的问题是:

是否可以更改上面的代码,使其像以前一样快速和 Pythonic (不使用第三方库)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)