python - 类的索引成员作为python中的列表
问题描述
假设我有一个简单的类
class Foo:
def __init__(bar):
self.x = transform1(bar)
self.y = transform2(bar)
我现在对生成一个类感兴趣,我可以在其中将一个可迭代的 for 传递给初始化程序并返回一个我可以访问成员bar
的实例,并且喜欢大小为 的迭代,即Foo
x
y
bar
x = [1, 2, 3]
foo = Foo(x)
plt.plot(foo.x, foo.y)
我知道一个人可以轻松做到
foo = [Foo(elem) for elem in x]
plt.plot([elem.x for elem in foo], [elem.y for elem in foo])
但这感觉很冗长,可能效率不高。我可以粗略地想象一个带有 numpy 结构化数组的解决方案,但我只是好奇是否有任何标准解决方案。也许使用元类。谷歌搜索主要是关于如何获取一个类或类似类的所有成员的列表的结果。
如果有人甚至可以提出一种允许索引对象或其成员的解决方案,那将是foo
伟大的。
解决方案
您可以使用单个循环而不是 2 来执行此操作:
class Foo:
def __init__(self, bar):
self.xs = []
self.ys = []
for elem in bar:
self.xs.append(elem.x)
self.ys.append(elem.y)
map
您可以使用and隐藏循环zip
:
class Foo:
def __init__(self, bar):
self.xs, self.ys = zip(*map(lambda e: (e.x, e.y), bar))
推荐阅读
- amazon-web-services - 我在 AWS Amplify 上的 Reactjs 应用程序阻止了我在 AWS 弹性 beantalk 上的 .Net Rest API
- android - 在我的应用程序 xml 文件中没有导航 Directions/Args 类
- swiftui - 为什么 TextField 不关注更新?(iOS 15)
- html - 如何更改展开折叠图标 Blazor TreeView 组件
- git - 不修改工作流文件时“拒绝允许 GitHub 应用程序创建或更新工作流”
- r - 用 ggplot 绘制逻辑回归线:警告消息:`stat_smooth()` 中的计算失败:未使用的参数(数据 = 数据)
- c# - 如何配置 CsvHelper.Configuration 以使用两个开始和结束字符转义
- java - Java 接口错误 - 不兼容的类型
- mysql - MYSQL 问题订单销售员的平均佣金率
- sql - 如何使用表 A 中的列来查询具有 3 列可能与来自表 A 的列匹配的表 B