如何编写函数将列表中的所有元组实例转换为Arc命名元组?
我来帮你搞定这个问题!你的需求是把列表里的每个三元组转换成Arc这个namedtuple的实例,现在的代码还差关键一步——你定义了Arc类型,但没有用输入的元组去创建它的具体实例。
解决方案
首先,别忘了先导入namedtuple,它在Python的collections模块里:
from collections import namedtuple
优化后的转换逻辑
更高效的做法是先把Arc类型定义好(只需要做一次),再写函数把元组转换成实例:
from collections import namedtuple # 提前定义Arc这个namedtuple类型,字段对应head、weight、tail Arc = namedtuple('Arc', ('head', 'weight', 'tail')) def convert_to_arc(tuple_item): # 把输入的元组元素拆包,创建Arc实例并返回 return Arc(*tuple_item)
处理整个输入列表
用列表推导式或者map函数批量转换你的输入列表:
input_list = [('root', 1, 'a'), ('b', 0.0, 'root'), ('b', 2, 'c'), ('a', 5, 'd'), ('b', 7, 'a')] output_list = [convert_to_arc(item) for item in input_list] # 打印结果 print(output_list)
运行后就能得到你期望的输出:
[Arc(head='root', weight=1, tail='a'), Arc(head='b', weight=0.0, tail='root'), Arc(head='b', weight=2, tail='c'), Arc(head='a', weight=5, tail='d'), Arc(head='b', weight=7, tail='a')]
为什么原来的代码不生效?
你原来的Convert函数只是返回了Arc这个类本身,而不是用输入元组t创建的实例。我们需要用Arc(*t)的写法,把元组里的元素“拆包”后传入,才能生成对应的Arc实例。
内容的提问来源于stack exchange,提问作者Asiis Pradhan
相关产品推荐
相关产品推荐

