我们假设我有一个生成器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
是一个列表,则相同的方法将起作用。
答案 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]
但显然更容易阅读