Python 从对象列表中检索对象的正确方法,其中对象满足某些条件
我不太清楚这个问题怎么表达;抱歉,如果它有误导性或重复 假设我有一门课:Python 从对象列表中检索对象的正确方法,其中对象满足某些条件,python,oop,Python,Oop,我不太清楚这个问题怎么表达;抱歉,如果它有误导性或重复 假设我有一门课: class MyClass(object): def __init__(self, num_apples): self.apples = num_apples a = MyClass(1) b = MyClass(3) c = MyClass(2) 如果我想找到这些对象中最多的苹果,很简单: group = [a, b, c] most_apples = max([g.apples for g
class MyClass(object):
def __init__(self, num_apples):
self.apples = num_apples
a = MyClass(1)
b = MyClass(3)
c = MyClass(2)
如果我想找到这些对象中最多的苹果,很简单:
group = [a, b, c]
most_apples = max([g.apples for g in group]) # == 3
但是,如果我想检索包含3个苹果而不是3个苹果的对象,该怎么办?我可以这样做:
has_most_apples = [g for g in group if g.apples == most_apples][0] # == b
所以我的问题是:有没有一种更优雅的方法来做到这一点
事实上,现在我已经写出来了,它似乎没有那么糟糕。问题仍然存在。我很好奇:)重新阅读你的问题,如果你有多个苹果,你可能想扩展到一个过滤函数-- 为了使其可读,您可以实现自己的功能
>>> def get_apples(num_apples):
return lambda x : x.apples==num_apples
>>> new_group = filter(get_apples(3),group)
重新阅读你的问题,如果你有多个苹果,你可能想扩展到一个过滤函数-- 为了使其可读,您可以实现自己的功能
>>> def get_apples(num_apples):
return lambda x : x.apples==num_apples
>>> new_group = filter(get_apples(3),group)
重新阅读你的问题,如果你有多个苹果,你可能想扩展到一个过滤函数-- 为了使其可读,您可以实现自己的功能
>>> def get_apples(num_apples):
return lambda x : x.apples==num_apples
>>> new_group = filter(get_apples(3),group)
重新阅读你的问题,如果你有多个苹果,你可能想扩展到一个过滤函数-- 为了使其可读,您可以实现自己的功能
>>> def get_apples(num_apples):
return lambda x : x.apples==num_apples
>>> new_group = filter(get_apples(3),group)
其他答案也不错。但请记住,您的代码
has_most_apples = [g for g in group if g.apples == most_apples][0]
将只返回苹果数最多的第一个元素。可能不止一个卑鄙的人能做到这一点。其他答案也不错。但请记住,您的代码
has_most_apples = [g for g in group if g.apples == most_apples][0]
将只返回苹果数最多的第一个元素。可能不止一个卑鄙的人能做到这一点。其他答案也不错。但请记住,您的代码
has_most_apples = [g for g in group if g.apples == most_apples][0]
将只返回苹果数最多的第一个元素。可能不止一个卑鄙的人能做到这一点。其他答案也不错。但请记住,您的代码
has_most_apples = [g for g in group if g.apples == most_apples][0]
将只返回苹果数最多的第一个元素。可以这样做的对象可能不止一个。函数使用
key
参数决定如何计算max。您可以使用max(组,key=lambda x:x.apples)
获取具有最大apples
值的对象。函数使用key
参数决定如何计算最大值。您可以使用max(组,key=lambda x:x.apples)
获取具有最大apples
值的对象。函数使用key
参数决定如何计算最大值。您可以使用max(组,key=lambda x:x.apples)
获取具有最大apples
值的对象。函数使用key
参数决定如何计算最大值。您可以使用max(组,key=lambda x:x.apples)
获取具有最大apples
值的对象。您可以在apples
属性上对列表进行排序,然后获取第一个元素
from operator import attrgetter
a = MyClass(1)
b = MyClass(3)
c = MyClass(2)
group = [a, b, c]
has_most_apples = sorted(group, key=attrgetter('apples'), reverse=True)[0]
当然,这与tdk提到即使有多个元素具有相同数量的苹果,也只返回一个元素的警告相同。您可以在
apples
属性上对列表进行排序,然后获取第一个元素
from operator import attrgetter
a = MyClass(1)
b = MyClass(3)
c = MyClass(2)
group = [a, b, c]
has_most_apples = sorted(group, key=attrgetter('apples'), reverse=True)[0]
当然,这与tdk提到即使有多个元素具有相同数量的苹果,也只返回一个元素的警告相同。您可以在
apples
属性上对列表进行排序,然后获取第一个元素
from operator import attrgetter
a = MyClass(1)
b = MyClass(3)
c = MyClass(2)
group = [a, b, c]
has_most_apples = sorted(group, key=attrgetter('apples'), reverse=True)[0]
当然,这与tdk提到即使有多个元素具有相同数量的苹果,也只返回一个元素的警告相同。您可以在
apples
属性上对列表进行排序,然后获取第一个元素
from operator import attrgetter
a = MyClass(1)
b = MyClass(3)
c = MyClass(2)
group = [a, b, c]
has_most_apples = sorted(group, key=attrgetter('apples'), reverse=True)[0]
当然,这与tdk提到即使有多个元素具有相同数量的苹果,也只返回一个元素的警告相同。太棒了,我不知道关键的论点。谢谢你的解释。太棒了,我不知道关键的论点。谢谢你的解释。太棒了,我不知道关键的论点。谢谢你的解释。太棒了,我不知道关键的论点。谢谢你的解释。