为了账号安全,请及时绑定邮箱和手机立即绑定

具有类属性的列表理解

具有类属性的列表理解

汪汪一只猫 2023-03-16 11:04:42
我想使用类属性来制作所有属性的单个列表:from dataclasses import dataclass@dataclassclass Foo:    a: int    b: intdata = [    Foo(1,2),    Foo(3,4)]print([[foo.a, foo.b] for foo in data])但结果是一列属性列表。我怎样才能有一个包含所有属性的列表[1,2,3,4]而不是[[1,2],[3,4]]?
查看完整描述

4 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

我建议你使用itertools.chain.from_iterable来展平中间列表

In [6]: import itertools


In [7]: print(list(itertools.chain.from_iterable([[foo.a, foo.b] for foo in data])))                                                                                                                               

[1, 2, 3, 4]


查看完整回答
反对 回复 2023-03-16
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

from functools import reduce 

from dataclasses import dataclass


@dataclass

class Foo:

  a: int

  b: int


data = [

  Foo(1,2),

  Foo(3,4)

]


result = [[foo.a, foo.b] for foo in data]

print(reduce(list.__add__, result))


查看完整回答
反对 回复 2023-03-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

你可以这样做:


print([value for foo in data for attr, value in foo.__dict__.items()])

它基本上是在做两个 for 循环,与做的一样:


for foo in data:

    for attr, value in foo.__dict__.items():

        print(value)


查看完整回答
反对 回复 2023-03-16
?
开满天机

TA贡献1786条经验 获得超13个赞

只需使用嵌套列表理解

[x for x in [foo.a, foo.b] for foo in data]


查看完整回答
反对 回复 2023-03-16
  • 4 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信