我注意到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代码所关注的神奇价值呢?
答案 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