查找python生成器/列表中的最大/最小对象

时间:2015-10-13 11:27:02

标签: python

我们假设我有一个生成器gen,它会产生一些列表。我想找到最长的名单。

我能做到

max((len(L) for L in gen))

这将获得最长列表的长度,但此时列表已经消失在时间的迷雾中。

或者我可以做

maxlength = 0
for L in gen:
    if len(L)>maxlength:
        savelist = L
        maxlength = len(L)

但似乎应该采用更加pythonic的方式来避免for循环和if语句。

编辑只是一条评论,可以帮助其他人搜索相关问题: 使用min查找最小的对象可以等效地完成,如果gen是一个列表,则相同的方法将起作用。

1 个答案:

答案 0 :(得分:6)

max有一个仅关键字参数key,它接受​​一个函数来判断哪个是最大的。

result = max(gen, key=len)

这相当于:

result = [el for _, el in sorted([len(el), el for el in gen])][-1]
# note that `sorted` takes a `key` argument too!
# # result = sorted(gen, key=len)[-1]

但显然更容易阅读