python显示最长单词的长度_lis中最长单词的长度

如果将生成器表达式重写为map调用(或者,对于2.x,imap):max(map(len, words))

…实际上比密钥版本快一点,而不是慢一点。

python.org 64位3.3.0:In [186]: words = ['now', 'is', 'the', 'winter', 'of', 'our', 'partyhat'] * 100

In [188]: %timeit max(len(w) for w in words)

%10000 loops, best of 3: 90.1 us per loop

In [189]: %timeit len(max(words, key=len))

10000 loops, best of 3: 57.3 us per loop

In [190]: %timeit max(map(len, words))

10000 loops, best of 3: 53.4 us per loop

Apple 64位2.7.2:In [298]: words = ['now', 'is', 'the', 'winter', 'of', 'our', 'partyhat'] * 100

In [299]: %timeit max(len(w) for w in words)

10000 loops, best of 3: 99 us per loop

In [300]: %timeit len(max(words, key=len))

10000 loops, best of 3: 64.1 us per loop

In [301]: %timeit max(map(len, words))

10000 loops, best of 3: 67 us per loop

In [303]: %timeit max(itertools.imap(len, words))

10000 loops, best of 3: 63.4 us per loop

我认为它比key版本更像Python,原因和genexp相同。

它是否和genexp版本一样是Python,这是有争议的。有些人喜欢map/filter/reduce/etc;有些人讨厌它们;我个人的感觉是,当你试图映射一个已经存在并且有一个好名字的函数(也就是说,一些你不必lambda或partial向上的函数)时,map会更好,但是YMMV(特别是如果你的名字是Guido)。

最后一点:the redundancy of len being called twice seems not to matter - does more happen in C code in this form?

这样想:您已经调用了lenN次。相反,调用它N+1次几乎不可能有什么不同,与您必须执行的任何操作N次相比,除非您有个小个大字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值