2015-11-29 13 views
8

ho un nome tuple che assegno valori come questo:Looping sugli elementi di chiamata tupla in python

class test(object): 
      self.CFTs = collections.namedtuple('CFTs', 'c4annual c4perren c3perren ntfixing') 

      self.CFTs.c4annual = numpy.zeros(shape=(self.yshape, self.xshape)) 
      self.CFTs.c4perren = numpy.zeros(shape=(self.yshape, self.xshape)) 
      self.CFTs.c3perren = numpy.zeros(shape=(self.yshape, self.xshape)) 
      self.CFTs.ntfixing = numpy.zeros(shape=(self.yshape, self.xshape)) 

C'è un modo per ciclo su elementi di nome tupla? Ho provato a fare questo, ma non funziona:

for fld in self.CFTs._fields: 
       self.CFTs.fld= numpy.zeros(shape=(self.yshape, self.xshape)) 

risposta

7

namedtuple è una tupla in modo da poter eseguire iterazioni come sopra tuple normale:

>>> from collections import namedtuple 
>>> A = namedtuple('A', ['a', 'b']) 
>>> for i in A(1,2): 
    print i 


1 
2 

ma tuple sono immutabili e quindi non è possibile modificare il valore

se è necessario il nome del campo è possibile utilizzare:

>>> a = A(1, 2) 
>>> for name, value in a._asdict().iteritems(): 
    print name 
    print value 


a 
1 
b 
2 

>>> for fld in a._fields: 
    print fld 
    print getattr(a, fld) 


a 
1 
b 
2 
+0

grazie a @Pawel, buona reut immutabilità. In che modo puoi adattare la tua risposta al mio codice specifico? – user308827

+1

basta sostituire a self.CTFs –

+0

Non stavo trovando una proprietà _asdict su python3, ho usato 'argp .__ dict __. Elementi()' invece – ThorSummoner

Problemi correlati