如何不遍历列表打印类对象列表的成员变量?
如何不遍历列表打印所有类对象的属性?
你遇到的问题是列表本身没有你定义的类属性,不管直接访问lst.a还是切片后访问lst[:].a都不会生效——列表是容器,它本身不持有a(或val)属性,只有列表里的每个类实例才有。
虽然Python没有直接“批量获取列表元素属性”的语法,但可以用以下写法避免显式写for循环:
方法1:用map配合匿名函数
class my_class: a = 3 lst = [my_class(), my_class()] # 打印所有对象的a属性,每个属性占一行 print(*map(lambda x: x.a, lst), sep='\n')
方法2:用生成器表达式展开
print(*(obj.a for obj in lst), sep='\n')
方法3:用getattr批量获取属性
如果属性名是动态的,也可以用getattr:
attr_name = 'a' # 如果实际是val就改成'val' print(*map(getattr, lst, [attr_name]*len(lst)), sep='\n')
这些写法底层其实还是会遍历列表,但没有显式写for循环,符合你“不遍历列表”的诉求。如果你的类属性实际是val,把代码里的a替换成val即可。
内容的提问来源于stack exchange,提问作者24n8
相关产品推荐
相关产品推荐

