Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从对象列表中检索对象的正确方法,其中对象满足某些条件_Python_Oop - Fatal编程技术网

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提到即使有多个元素具有相同数量的苹果,也只返回一个元素的警告相同。

太棒了,我不知道关键的论点。谢谢你的解释。太棒了,我不知道关键的论点。谢谢你的解释。太棒了,我不知道关键的论点。谢谢你的解释。太棒了,我不知道关键的论点。谢谢你的解释。