Python 如何在namedtuple对象上迭代?
这就是我所拥有的:Python 如何在namedtuple对象上迭代?,python,python-2.7,loops,namedtuple,Python,Python 2.7,Loops,Namedtuple,这就是我所拥有的: Site = namedtuple('Site', 'number x y') Sites = namedtuple('Sites', 'p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14') my_sites = Sites(Site('p1', 607, 184), Site('p2', 698, 254), Site('p3', 821, 309),
Site = namedtuple('Site', 'number x y')
Sites = namedtuple('Sites', 'p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14')
my_sites = Sites(Site('p1', 607, 184),
Site('p2', 698, 254),
Site('p3', 821, 309),
Site('p4', 569, 237),
Site('p5', 647, 302),
Site('p6', 727, 374),
Site('p7', 437, 289),
Site('p8', 548, 358),
Site('p9', 650, 416),
Site('p10', 352, 333),
Site('p11', 451, 432),
Site('p12', 222, 435),
Site('p13', 338, 507),
Site('p14', 431, 579))
这就是我想做的:
cc = 1;
for x in build:
x = my_sites.p[cc].x
y = my_sites.p[cc].y
cc = cc + 1
build
只是一个随机列表
这是我得到的错误:
AttributeError:“站点”对象没有属性“p”
有什么办法解决这个问题吗
问题:如何在命名的耦合对象上迭代
正如所指出的:使用getattr(…)–威廉·范昂森正如所指出的:
站点
。。。没有p
…,他们有p1、p2、p3等
你必须这样使用它:
from collections import namedtuple
Site = namedtuple('Site', 'number x y')
Sites = namedtuple('Sites', 'p1 p2 p3')
my_sites = Sites(Site(1, 607, 184), Site(2, 698, 254), Site(3, 821, 309))
for x in [1,2,3]:
attr = "p{}".format(x)
site = getattr(my_sites, attr)
print("{}:{}".format(attr, site))
for attr in ['p1', 'p2', 'p3']:
print("{}:{}".format(attr, getattr(my_sites, attr)))
print("p2:{}".format(my_sites.p2))
输出:
p1:Site(number=1, x=607, y=184)
p2:Site(number=2, x=698, y=254)
p3:Site(number=3, x=821, y=309)
Site(number=2, x=698, y=254)
用Python测试:3.4.2使用getattr(..)
。为什么要迭代一个namedtuple对象,迭代元组绝对没有意义您考虑过使用列表吗?@Antti HaapalaL迭代namedtuple
实例与迭代任何其他序列(如tuple
或list
)一样有意义,并且可能在某些上下文中发生(例如,如果函数只要求传递给它的参数是可编辑的,则如何在函数内访问内容,例如sum()
).也就是说,这个问题中显示的情况似乎不是这样。@roganjosh:据我所知,OP似乎并没有试图改变名称的倍数,所以我认为你的猜测是不正确的。不管怎样,看看安蒂对此有何回应将是一件有趣的事情。