列表中最长单词的长度

wim*_*wim 7 python string performance coding-style list

获得最长单词长度的pythonic方法是什么:

len(max(words, key=len))

要么:

max(len(w) for w in words)

或者是其他东西? words是一个字符串列表.我发现我需要经常这样做,并且在使用几个不同的样本大小计时之后,第一种方式似乎始终更快,尽管看起来表面效率较低(len被调用两次的冗余看起来并不重要 - 更多发生在这种形式的C代码?).

Jon*_*nts 7

虽然:

max(len(w) for w in words)
Run Code Online (Sandbox Code Playgroud)

有点"阅读"更容易 - 你有一个发电机的开销.

而:

len(max(words, key=len))
Run Code Online (Sandbox Code Playgroud)

使用内置函数可以使用密钥进行优化,因为len对于字符串来说通常是非常有效的操作,会更快...


Omn*_*ous 5

我认为两者都可以,但我认为除非速度是max(len(w) for w in words)最具可读性的考虑因素.

当我看着它们的时候,花了我更长的时间来弄清楚到底len(max(words, key=len))在做什么,而且在我想到它之前我还是错了.代码应该立即显而易见,除非有充分的理由不这样做.

从其他帖子(以及我自己的测试)中可以清楚地看出,可读性较差的帖子更快.但这并不像他们中的任何一个都是狗慢.除非代码处于关键路径,否则不值得担心.

最终,我认为更具可读性更多是Pythonic.

顺便说一句,这是为数不多的几个案例,其中Python 2在同一任务中明显比Python 3快.