如何将包含属性值的列表(或numpy数组)插入对象列表(如下所示)?
class myClass(object):
def __init__(self, attr):
self.attr = attr
self.other = None
objs = []
for i in range(10):
objs.append(myClass(i))
attrs = [o.attr for o in objs]
print attrs
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[o.attr for o in objs] = range(10)
#SyntaxError: can't assign to list comprehension
这是Extract list of attributes from list of objects in python的反问题。
答案 0 :(得分:3)
我会做这样的事情:
for i, o in enumerate(objs):
o.attr = i
enumerate(objs)
有点像zip(range(len(objs)), objs)
,所以如果你真的想从另一个序列中获取值,你可以:
for i, o in zip(sequence, objs):
o.attr = i
为了提高效率,你也可以在那里使用itertools.izip。
答案 1 :(得分:1)
您还可以在列表理解中使用obj.__setattr__()
:
[o.__setattr__('attr',v) for o,v in zip(objs,range(10)[::-1])]
print [o.attr for o in objs]
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]