2015-08-26 4 views
-1

Как присвоить значение атрибуту .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, 

[< главный объект .C на 0x10454de50>, < главный объект .C на 0x10454ded0>, < главный объект .C на 0x10454df90>, < Главный .C объект по адресу 0x10455b150)]

[Законченный в 0,1с]

редактировать

Как изменить i с пониманием список:

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

почему вы этого хотите? –

+0

Теперь вы задаете другой вопрос. – juanchopanza

+0

пытается расширить исходный объект до того, как писать во «внешнюю» переменную изнутри, не используя самое левое пространство. – alphanumeric

ответ

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 

Обратите внимание, что это может быть хорошей идеей, чтобы добавить параметр ID для C «s конструктора, так что вы можете создавать объекты C с любым ID вы хотите:

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