Volatility 的答案很好,但让我们看看另一种方法来做到这一点。
如果您不仅将列表按排序顺序排列,而且将其分组为相同长度的批次,该怎么办?那么这很容易:打印第一组,然后打印最后一组。
Python 附带的一个函数可以为您进行分组itertools.groupby
,所以很容易:
l.sort(key=len) # puts them in order
groups = list(itertools.groupby(l, key=len))
print('The shortest words are: {}'.format(groups[0][1])
print('The longest words are: {}'.format(groups[-1][1])
你可以把它变成一个单行:
groups = list(itertools.groupby(sorted(l, key=len), key=len))
但是,我认为在这种情况下我不会。重复key=len
的和所有这些额外的括号使它更难阅读。
同时,当您只需要第一个时,您可以避免创建整个组列表:
l.sort(key=len)
shortest = itertools.groupby(l, key=len)
print('The shortest words are: {}'.format(next(shortest)[1]))
longest = itertools.groupby(reversed(l), key=len)
print('The longest words are: {}'.format(next(longest)[1]))
但是,除非list
它真的很大,否则我不会担心这个。