2015-11-29 55 views
8

我有一個名爲元組,我值分配給這樣的:循環通過命名元組的元素在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)) 

有沒有辦法來遍歷命名元組的元素?我試着這樣做,但不工作:

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

回答

7

namedtuple是一個元組,因此您可以在正常的元組進行迭代:

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


1 
2 

但元組是不可變的,所以你不能改變值

如果你需要你可以使用的字段的名稱:

>>> 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

謝謝@Pawel,好的點不變性。任何方式,你可以適應你的迴應我的具體代碼? – user308827

+1

只是用自己替換.CTF –

+0

我沒有在python3上找到_asdict屬性,我使用了'argp .__ dict __。items()'而不是 – ThorSummoner