繁体   English   中英

Pythonic获取列表中最大项的方法

[英]Pythonic way to get the largest item in a list

有没有更好的方法呢? 我不需要对列表进行排序,只需扫描即可获得具有最大指定属性的项目。 我最关心的是可读性,但是对整个列表进行排序以获得一个项目似乎有点浪费。

>>> import operator
>>> 
>>> a_list = [('Tom', 23), ('Dick', 45), ('Harry', 33)]
>>> sorted(a_list, key=operator.itemgetter(1), reverse=True)[0]
('Dick', 45)

我可以非常详细地做到这一点......

>>> age = 0
>>> oldest = None
>>> for person in a_list:
...     if person[1] > age:
...             age = person[1]
...             oldest = person
... 
>>> oldest
('Dick', 45)
max(a_list, key=operator.itemgetter(1))

你可以使用max函数。

模块__builtin__中内置函数max的帮助:

MAX(...)

max(iterable [,key = func]) - > value

max(a,b,c,... [,key = func]) - >值

使用单个可迭代参数,返回其最大项。 使用两个或多个参数,返回最大的参数。

max_item = max(a_list, key=operator.itemgetter(1))

键也可以是lambda,例如:

people = [("Tom", 33), ("Dick", 55), ("Harry", 44)]
oldest = max(people, key=lambda p: p[1])

出于某种原因,与itemgetter相比,使用lambda使得感觉更像是“我的代码”正在完成工作。 我认为当你有一组对象时,这感觉特别好:

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

people = [Person("Tom", 33), Person("Dick", 55), Person("Harry", 44)]
oldest = max(people, key=lambda p: p.age)

使用max()函数或执行FP样式:

reduce(lambda max, c: max if c <= max else c, [1, 6, 9, 2, 4, 0, 8, 1, 3])

有人提到了以下解决方案:

max(nameOfList, key=len)

但是,此解决方案仅返回最大大小的第一个顺序元素。 因此,例如,在list [“ABC”,“DCE”]的情况下,仅返回列表的第一项。

为了解决这个问题,我找到了使用filter函数的以下解决方法:

filter((lambda x: len(x)==len(max(nameOfList, key=len))),nameOfList)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM