python中命名元组元素的循环

2024-06-16 10:36:11 发布

您现在位置: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))

Tags: selfnumpyzeros命名元组shape赋值fld
2条回答

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
from collections import namedtuple
point = namedtuple('Point', ['x', 'y'])(1,2)
for k, v in zip(point._fields, point):
    print(k, v)

输出:

x 1
y 2

相关问题 更多 >