在链接的问题中,我问了创建类似列表对象的最快方法"它包含很多简单数据类型的变量。最好的答案告诉我使用array
模块,它工作得非常好!以下是其工作原理的示例代码:
from array import array
a = array('i', (0,)) * 10 ** 8
但是现在我有一个问题......我不想只存储整数......我想存储我自己编写的类的实例。这个班可以是一个点''类:
class Point:
def __init__(s, x, y):
s.x = x
s.y = y
def dist_from_origin(s):
return s.x ** 2 + s.y ** 2
如果我想为每个索引Point(0, 0)
创建一个包含默认值的数组对象,该怎么办?那可能吗?如果没有,那么array
对象的替代方案是否与它一样快? 请不要在答案中包含我可以做一个包含' x'值和另一个包含' y'因为这不是一个好的做法......
以下是我试图解决问题的方法:
from ctypes import Structure, c_int
class Point(Structure):
_fields_ = [('x', c_int), ('y', c_int)]
p_arr = (Point * 10 ** 8)() # takes 0.5 sec (slow)
我的解决方案在代码中可能比使用array
模块的解决方案(如果存在)更简单,但它非常慢。
在回答之前,请记住我的目标是拥有一个快速的解决方案,而不是一个漂亮的解决方案。
另外,我不允许使用任何外部模块(需要安装的模块),如numpy。