在python中使用map处理listofobjects

2024-09-29 06:27:56 发布

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

我想用map函数计算质心。我不想用for循环。帮助处理下面两行?在

class Obj():  
    def __init__(self, mass = 0., x = 0., y = 0.):    
        self.mass = mass    
        self.x = x    
        self.y = y    

# Create List of Objects    
objList = []
n = 0    
for i in range(0,10):    
    for j in range(0,10):    
        objList.append(Obj(i*j,i,j))    

# Calculate Center of Mass of List
# The following is pseudocode, does not actually work
SumOfMass = sum(objList[:].mass)       
CenterOfMassX = sum(objList[:].x.*objList[:].mass)/SumOfMass    

Tags: of函数inselfobjmapforrange
3条回答

除非放弃反for偏见,否则不能完成最后两行。在

SumOfMass = sum(obj.mass for obj in objList)       
CenterOfMassX = sum(obj.x * obj.mass for obj in objList)/SumOfMass 

使用py2k(你在用哪个?),map(func, alist)相当于[func(v) for v in alist],即返回一个列表。你需要两个标量答案,而不是一个或两个向量。你有什么想法?为什么要用map函数计算质心?在

如果您确实坚决反对使用for,那么可以使用operator模块中的^{}函数。E、 G.:

from operator import attrgetter
mass_of = attrgetter('mass')
SumOfMass = sum(map(mass_of, objList))

但是,这样做违背了Python风格的要求(使用camelCase变量也一样——通常将它们命名为like_this)。如果您需要访问的对象已经是以sequence元素作为其唯一参数的函数的形式,那么使用map或多或少是可以接受的。换句话说,如果您可以调用map(some_function, sequence),而不必像上面那样跳过任何一个环来得到some_function,那么就可以了。在

对于其他情况(大多数情况下),使用list-comprehension样式被认为是可取的或强制性的,如其他一些答案中所示。在

sumofmass = sum(i.mass for i in objList)
centre = sum(i.x * i.mass for i in objList)/sumofmass

另外,您可以这样填充objList

^{pr2}$

注意,range只接受整数参数。在

p.S.mapfor循环。在

相关问题 更多 >