gpt4 book ai didi

对象列表中的 Python 返回具有类属性集的第一个对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:14 24 4
gpt4 key购买 nike

给定具有属性 a 和 b 的对象列表,我想从列表中满足给定约束的第一个对象获取属性。下面显示了一种解决方案,但对于具有许多属性的对象,这是不可取的。

class Foo(object):
def __init__(self):
self.a = 0
self.b = 1

def get_first_a(l):
return next(val.a for val in l if val.a > 0)

def get_first_b(l):
return next(val.b for val in l if val.b > 0)

def main():
bar0 = Foo()
bar1 = Foo()
bar2 = Foo()
bar2.a = 10
l = [bar0, bar1, bar2]
a = get_first_a(l) # returns 10
b = get_first_b(l) # returns 1

有没有办法将对象属性传递给函数?我宁愿不添加枚举或使用字符串匹配,而是类似以下内容的内容:

def get_first_b(l, object_attribute):
return next(val.object_attribute for val in l if val.object_attribute != 0)

最佳答案

您可以使用 getattr,但如果没有满足您条件的 object_attribute,您将以 StopIteration 错误结束:

def get_first(l, object_attribute, op, cond):
return next((getattr(val, object_attribute) for val in l
if op(getattr(val, object_attribute), cond)), None)

您可以将任何您喜欢的内容传递给单个函数:

from operator import ne, gt, lt
def main():
bar0 = Foo()
bar1 = Foo()
bar2 = Foo()
bar2.a = 10
l = [bar0, bar1, bar2]
a = get_first(l,"a", gt, 0) # returns 10
b = get_first(l, "b", ne, 0) # returns 1
c = get_first(l, "b", lt, -1)
print(a)
print(b)
print(c)

main()

输出:

10
1
None

关于对象列表中的 Python 返回具有类属性集的第一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com