"Python可变长度的元组列表:获取仅包含对象属性的元组的字符串表示"

2024-06-24 12:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,这些元组由某个类的对象组成,它们的维度不同:

my_list = [(obj1, obj2), (obj3, obj1), (obj4, obj1), (obj2,),...]

所有这些对象都有一个属性label,其类型为string,并包含一个对象标签,例如'object_1''object_2'等等。在

现在我想提取包含属性值(标签)的元组的字符串表示,例如:

^{pr2}$

我已经从一个对象列表中查找了如何extract a list of attributes和如何convert a tuple to string,并可能通过一些嵌套的for循环来实现我的目标。但我被困在一些乱七八糟的代码里。。在

但不是有什么好的Python式的方法吗?在

提前谢谢!在

*编辑:有些元组是一维的,例如(obj2,)。对不起,我忘了,现在我改了我的问题!在


Tags: 对象类型列表string属性objectmy标签
3条回答

您可以使用list comprehension进行此操作:

['({}, {})'.format(el1.label, el2.label) for el1, el2 in my_list]

要不依赖元组维度,请使用helper函数:

^{pr2}$

你能做到的

["(%s, %s)" %(i.label, j.label) for i, j in my_list]

如果元组内部的动态长度:

^{pr2}$

另外两个简单的列表理解答案适用于具有属性的对象元组的任意列表。但是,Python有一些很好的内置功能,可以让您选择对象的字符串表示,大多数内置类型都已经有了。例如,任何tuple都可以转换为它的字符串表示形式,只需将tuplestr(tuple)包在一起:

>>> str((5, 4))
'(5, 4)'

现在,如果使用任意对象的元组来执行此操作,那么您将得到一个字符串,它具有实际的对象句柄,比如<__main__.YourClass object at 0x10ad58fd0>,这很难看。但是,如果您在类定义中提供了一个__repr__函数,那么您可以将该标准句柄改为您喜欢的东西。在本例中,label似乎是返回对象的字符串表示的一个很好的候选者。下面是一个使用相同代码创建的最小示例:

^{pr2}$

['(object_1, object_2)', '(object_3, object_1)', '(object_4, object_1)', '(object_2,)']

现在我认为这个非常python,在后面的代码中非常清楚,并且定义__repr__只需要额外的两行代码。现在您可以print(my_obj)而不是{},它读起来很好。在

相关问题 更多 >