如何在列表理解中分配值

时间:2015-08-26 06:01:36

标签: python oop list-comprehension

如何从[列表推导内部]为对象的.ID属性赋值?

class C(object):
    def __init__(self): 
        self.ID=0

l=[C() for i in range(4)]
print l

t=[c for c in l if c.ID+1]
for c in t: print c.ID,
  

[< main .C对象位于0x10454de50>,< main .C对象位于   0x10454ded0>,< main .C对象位于0x10454df90>,< main .C对象   在0x10455b150>]

     

0 0 0 0

     

[以0.1秒完成]

修改

如何使用列表解析更改i

l=[i for i in range(4)]
i=0
t=[c for c in l if i++]
print i

1 个答案:

答案 0 :(得分:1)

您可以定义一个简单的函数来执行转换:

def foo(c):
    c.ID += 1
    return c

然后在列表理解中使用它:

>>> t=[foo(c) for c in l]
>>> for c in t: print c.ID,
1 1 1 1
>>> for c in l: print c.ID,
1 1 1 1

请注意,向C的构造函数添加ID参数可能是个好主意,因此您可以使用任何ID构造C对象:

class C(object):
    def __init__(self, ID=0): 
        self.ID=ID

然后

>>> a = [c(42) for _ in xrange(4)]
>>> b = [c(i) for i in xrange(4)]
>>> for c in a: print c.ID,
42 42 42 42
>>> for c in b: print c.ID,
>>> 0 1 2 3