问题描述
我遇到过这样的代码:
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 (将#修改为@)