为什么Python的max()函数对具有前导空格的字符串赋值较低?

时间:2014-10-03 23:44:25

标签: python python-2.7 cpython

The Quesion

我注意到Python 2.7.6中的内置max()函数似乎放置了一个低值""在具有前导空格的字符串上,除非我明确告诉它使用len函数作为键。那是为什么?

实施例

考虑交互式解释器的这个片段:

  

>>> max([' abc',' defgh'])
  ' defgh'
  >>> max([' abc',' defgh'])
  ' ABC'
  >>> max([' defgh'])
  ' defgh'
  >>> max([' abc',' defgh'],key = len)
  ' defgh'

备注

我尝试max()查看{{1}},并调用the source。在min_max()上,处理未指定密钥的情况。有评论说"没有关键功能;值是项目"。我不知道除了长度之外可以与字符串相关联的值,那么这个注释意味着什么?另外,为什么一个领先的空间会影响这个C代码所关注的神奇价值呢?

2 个答案:

答案 0 :(得分:2)

Python根本不“忽略”字符串 - 这种行为正是因为Python 忽略了任何东西。

而是之前的空格字母和字符串按字典顺序排列(区分大小写!)或逐个字符。有关空格的相对排序(空格= 32)和英文字母中的其他字符(“a”= 97),请参阅ASCII table

" foo" < "foo"为真,min(" foo", "foo")" foo",相反,max(" foo", "foo")"foo"。因此,这也导致"Z" < "a"成立,这可能是令人惊讶的。

如果代码想要忽略该空格,则可以使用max(.., key = lambda i: i.strip()),也可以在适当时抛出大小写标准化。

(在这种情况下,添加密钥长度函数的结果是无关紧要的,因为更大的长度是最大的。)

答案 1 :(得分:2)

Max不使用长度,它使用字母顺序:

>>> max(['abc', 'de'])
'de'

空间出现在'a'之前:

>>> ' ' < 'a'
True