如何以pythonic方式对对象列表的参数求和?
当我使用numpy时,我可以简单地写下两个1D数组的和:如何以pythonic方式对对象列表的参数求和?,python,object,numpy,Python,Object,Numpy,当我使用numpy时,我可以简单地写下两个1D数组的和: C = A + B 如果我有一个对象列表,列表中的所有对象都属于同一个类,并且都有三个参数(r、v和a)。如果我想计算列表中所有对象的r=r+v+0.5*a: 如果我知道我所有的对象都在一个列表L中,我如何像在numpy中那样把它写在一行中 我想是这样吧 L.r += L.v + 0.5*L.a 如果你能用两条线存活下来,试试这个: for item in L: item.r += item.v + 0.5 *
C = A + B
如果我有一个对象列表,列表中的所有对象都属于同一个类,并且都有三个参数(r、v和a)。如果我想计算列表中所有对象的r=r+v+0.5*a
:
如果我知道我所有的对象都在一个列表L中,我如何像在numpy中那样把它写在一行中
我想是这样吧
L.r += L.v + 0.5*L.a
如果你能用两条线存活下来,试试这个:
for item in L:
item.r += item.v + 0.5 * item.a
如果你能用两条线存活下来,试试这个:
for item in L:
item.r += item.v + 0.5 * item.a
如果你不能靠两条线生存:
[setattr(item,'r',item.r + item.v + 0.5 * item.a) for item in L]
如果你不能靠两条线生存:
[setattr(item,'r',item.r + item.v + 0.5 * item.a) for item in L]
有点不清楚您想要的输出是什么。您是否正在查找数字列表:
[x.r + x.v + .5*x.a for x in L]
这些的总和是多少
sum([x.r + x.v + .5*x.a for x in L])
还是改变对象本身
runningSum=0
def mod(obj):
# How complicated this function is depends on what your trying to accomplish.
obj.r = runningSum + obj.r + obj.v + .5*obj.a
runningSum = obj.r
return obj
map(mod,L)
有点不清楚您想要的输出是什么。您是否正在查找数字列表:
[x.r + x.v + .5*x.a for x in L]
这些的总和是多少
sum([x.r + x.v + .5*x.a for x in L])
还是改变对象本身
runningSum=0
def mod(obj):
# How complicated this function is depends on what your trying to accomplish.
obj.r = runningSum + obj.r + obj.v + .5*obj.a
runningSum = obj.r
return obj
map(mod,L)
虽然不是一个正式的答案,但我想唤起你们的好奇心,让你们想象一个由你们的问题引发的充满可能性的世界。如果出于某种原因不想使用numpy,并且只想知道如何在一行中求列表中所有元素的和,那么可能需要重新定义列表之间的操作。这可以通过定义一个非常简单的类来实现,如下所示:
class array():
def __init__(self, mylist):
self.list = mylist
return
def __add__(self, other):
for i in xrange(len(self.list)):
self.list[i] += other.list[i]
return array(self.list)
def __repr__(self):
return "%s" % (self.list)
您可以看到,该类是使用python列表实例化的,然后我定义了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,它本质上。当然,这里有足够的空间来改进它并检查异常,但这只是为了强调一个事实,即您可以定义任何您想要的。您可以看到,添加两个数组对象将返回一个新的数组对象,这允许我们继续添加
为了让您了解它是如何工作的,下面我写了一个非常简单的示例:
A = array([1,2,3,4,5])
B = array([3,2,4,5,6])
C = A+B
然后,如果在提示符中键入C,您将看到
[4, 4, 7, 9, 11]
这也是一个数组类 虽然不是一个正式的回答,但我想唤起你的好奇心,让你想象一个由你的问题引发的充满可能性的世界。如果出于某种原因不想使用numpy,并且只想知道如何在一行中求列表中所有元素的和,那么可能需要重新定义列表之间的操作。这可以通过定义一个非常简单的类来实现,如下所示:
class array():
def __init__(self, mylist):
self.list = mylist
return
def __add__(self, other):
for i in xrange(len(self.list)):
self.list[i] += other.list[i]
return array(self.list)
def __repr__(self):
return "%s" % (self.list)
您可以看到,该类是使用python列表实例化的,然后我定义了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,它本质上。当然,这里有足够的空间来改进它并检查异常,但这只是为了强调一个事实,即您可以定义任何您想要的。您可以看到,添加两个数组对象将返回一个新的数组对象,这允许我们继续添加
为了让您了解它是如何工作的,下面我写了一个非常简单的示例:
A = array([1,2,3,4,5])
B = array([3,2,4,5,6])
C = A+B
然后,如果在提示符中键入C,您将看到
[4, 4, 7, 9, 11]
这也是一个数组类 这(矢量化)是在做arthmetic时使用numpy而不是列表的主要原因之一。据我所知,在本机python中,如果不调用for循环或列表理解,就无法做到这一点。出于好奇,您为什么希望在numpy之外进行此类操作?如果我在对象列表上使用numpy.asarray,我是否能够直接对numpy.array上对象的参数进行矢量化?它告诉我AttributeError:'numpy.ndarray'对象没有属性'r'@Phaune您需要做的是创建3个numpy数组,每个属性一个,执行向量化操作(效率更高),然后在原始对象列表中设置值。这(向量化)这是在做arthmetic时使用numpy而不是列表的主要原因之一。据我所知,在本机python中,如果不调用for循环或列表理解,就无法做到这一点。出于好奇,您为什么希望在numpy之外进行此类操作?如果我在对象列表上使用numpy.asarray,我是否能够直接对numpy.array上对象的参数进行矢量化?它告诉我AttributeError:'numpy.ndarray'对象没有属性'r'@Phaune您需要做的是创建3个numpy数组,每个属性一个,然后执行向量化操作(这将更加高效)然后在原来的对象列表中设置这些值,但是在做这个之前我真的会考虑亚当@休斯的评论。但是我真的会考虑亚当@休斯的评论。提问者只是想复制一个numpy功能。我认为这个问题并没有说明任何关于所需输出的内容,提问者只是想复制一个numpy功能。