【发布时间】:2018-02-27 23:50:15
【问题描述】:
我有一个由某个类的对象组成的元组列表,它们的维度不同:
my_list = [(obj1, obj2), (obj3, obj1), (obj4, obj1), (obj2,),...]
所有这些对象都有一个属性label,它的类型是string,并拥有一个对象标签,例如'object_1'、'object_2' 等等。
现在我想提取包含属性值(标签)的元组的字符串表示,例如:
my_new_list = ['(object_1, object_2)', '(object_3, object_1)', '(object_4, object_1)', '(object_2,)', ...]
我已经查找了如何从对象列表中查找extract a list of attributes 以及如何查找convert a tuple to string,并且可能会通过一些嵌套的 for 循环来实现我的目标。但是我在这里遇到了一些乱七八糟的代码..
但是没有一些不错的pythonic方法可以做到这一点吗?
提前致谢!
*编辑:一些元组是一维的,例如(obj2,)。抱歉,我忘记了,现在修改了我的问题!
【问题讨论】:
-
这里的标准列表理解有什么问题?
-
不仅仅是对象,而是元组字符串表示中的属性。
-
作为一般提示,您通常可以通过用实际的 for 循环写出理解的结构来查看它。在这种情况下,您将编写
for obj1, obj2 in my_list以显示元组,然后将'(%s,%s)' % (obj1.label, obj2.label)附加到最初为空的列表中。您可以在下面的答案中看到相同的结构。编辑:刚刚看到编辑。同样的一般原则也适用。 -
感谢您的提示!
-
我添加了一个更通用的答案,不使用我认为很好读并且是标准 python 的嵌套推导。使用
__repr__函数为您的类提供良好的字符串表示是一种很好的做法,这样它们就可以以这样的方式使用。print(my_obj)只是比print(my_obj.label)更好,如果标签是有意义的......好吧......对象的标签。